Solaris中的进程同步
Solaris实现了各种锁来支持多任务,多线程和多处理。它使用自适应互斥锁,条件变量,信号量,读写锁,旋转栅门来控制对关键部分的访问。
一个自适应互斥使用用于保护仅由短代码段访问每一个关键数据项。
在多处理器系统上,它以标准信号量自旋锁开始。如果锁由正在另一个CPU上运行的线程持有,则该线程旋转。如果锁由当前处于运行状态的线程持有,则线程将阻塞,进入睡眠状态,直到被释放锁的信号唤醒为止。
如果代码段较长,则自旋等待方法效率极低。因此,将条件变量,信号量用于它们。
Solaris提供了Read-Write锁,以保护长段代码经常以只读方式频繁访问的数据。
它使用旋转门对等待获取自适应互斥锁或读写器锁的线程列表进行排序。Turnstile是一个队列结构,其中包含被锁定的线程。它们是每个锁保持线程,而不是每个对象。旋转门根据优先级继承进行组织,这使运行中的线程在其旋转门中具有最高优先级的线程,以防止优先级反转。
内核使用锁定机制,用户级线程也使用锁定机制,因此锁在内核内部和外部均可用。区别仅在于优先级继承仅在内核,用户级线程中不提供此功能。
为了优化Solaris性能,开发人员会改进锁定方法,因为锁通常用于关键的内核功能,并且通常用于关键的内核功能,因此可以调整其实现并用于获得出色的性能。