53 POSIX 信号量
大概特点
POSIX 信号量有两种:命名信号量和匿名信号量,前者和 System V 信号量比较相似(System V 的 IPC 都用 key 来标识,因此相当于是命名的)。
POSIX 信号量使用了 futex(2) 来实现,在没有争抢的情况下,不会发生系统调用,因此效率比 System V 实现更高。在争抢频繁的情况下,两者性能差不多。
和 POSIX 消息队列类似,Linux 上的 POSIX 信号量被挂载在 /dev/shm 目录这个 tmpfs 文件系统下。该文件系统具有内和持久性。
(二元)信号量和 pthreads mutex 相比:
- 前者是异步信号安全的,后者不是。但是处理信号还是建议用
sigwaitinfo()
。 - 前者可以由任何线程释放资源(
sem_post()
),后者只能由锁的持有者释放,否则是未定义行为。