Solaris 中的进程同步


Solaris 实现各种锁来支持多任务、多线程和多处理。它使用自适应互斥量、条件变量、信号量、读写锁、旋转门来控制对临界区的访问。

自适应互斥量用于保护每个仅由短代码段访问的关键数据项。

在多处理器系统上,它从标准信号量自旋锁开始。如果锁由在另一个 CPU 上运行的线程持有,则线程自旋。如果锁由当前处于运行状态的线程持有,则线程阻塞,进入睡眠状态,直到被释放锁的信号唤醒。

如果代码段较长,则自旋等待方法效率极低。因此,条件变量、信号量被用于它们。

Solaris 提供读写锁来保护通常以只读方式被长代码段频繁访问的数据。

它使用旋转门来排序等待获取自适应互斥量或读写锁的线程列表。旋转门是一种包含阻塞在锁上的线程的队列结构。它们是每个锁持有线程的,而不是每个对象的。旋转门根据优先级继承进行组织,这使得运行线程具有其旋转门中线程的最高优先级,以防止优先级反转。

内核使用的锁定机制也被用户级线程使用,以便锁在内核内部和外部都可用。唯一的区别在于优先级继承仅在内核中使用,用户级线程不提供此功能。

为了优化 Solaris 的性能,开发人员改进了锁定方法,因为锁被频繁使用,并且通常用于关键的内核功能,调整它们的实现和使用以获得更高的性能。

更新于: 2019年10月11日

2K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告