Solaris 实现各种锁来支持多任务处理、多线程和多处理。它使用自适应互斥锁、条件变量、信号量、读写锁、旋转门来控制对临界区的访问。自适应互斥锁用于保护每个临界数据项,这些数据项仅由短代码段访问。在多处理器系统上,它从标准信号量自旋锁开始。如果锁由在另一个 CPU 上运行的线程持有,则线程会自旋。如果锁由当前处于运行状态的线程持有,则线程会阻塞,进入睡眠状态,直到被信号唤醒……阅读更多
要使用信号量实现监视器,对于每个监视器,都会提供一个信号量互斥锁(初始化为 1)。进程必须在进入监视器之前执行 wait(mutex),并且必须在离开监视器后执行 signal(mutex)。由于信号进程必须等到恢复的进程离开或等待,因此引入了另一个初始化为 0 的信号量 next。信号进程可以使用 next 来挂起自身。还提供了一个整型变量 next_count 来计算挂起在 next 上的进程数。因此,每个外部函数 F 都被替换为-wait(mutex); … F 的主体 ... ...阅读更多
Grand Central Dispatch (GCD)——Apple 的 Mac OS X 和 iOS 操作系统的一项技术——是 C 语言扩展、API 和运行时库的组合,允许应用程序开发人员识别要并行运行的代码段。与 OpenMP 一样,GCD 管理线程的大部分细节。GCD 识别对 C 和 C++ 语言的扩展,称为块。块只是一个自包含的工作单元。它由插入在一对花括号 { } 前面的脱字符号 ˆ 指定。下面显示了一个简单的块示例……阅读更多