一 概述:
(1)互斥锁、条件变量和读写锁都是无名的,即它们是基于内存的,能够很容易的在单个进程内的不同线程间共享,进行线程间同步;然而只有它们放在不同进程间共享的内存区中时,它们才可能为这些进程所共享。
(2)Posix信号量有两种形式:有名信号量和基于内存的信号量。有名信号量总能在不同进程间共享(因为它们是用Posix IPC名字标示的);基于内存的信号量必须放在进程间共享内存区中才能实现进程间共享。System V信号量是有名的,能够很容易在不同进程间共享。
(3)自旋锁(spin lock):为多处理器并发而引入的一种锁。若试图获得另一个正在执行线程拥有的锁,则进入循环等待状态,直到该锁被释放为止,由于循环将造成浪费,自旋锁只用于多处理器系统中,并且通常只用在开发人员预测该锁只会短期被持有的时候。由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠非常重要,自旋锁的效率远高于互斥锁。信号量和读写锁适合保持时间较长的情况。