加载中...

信号量是 Edsger Dijkstra 于 1960 年代提出的同步原语,核心是一个整数计数器与两个原子操作:P(wait,计数减一,不足则阻塞)和 V(signal,计数加一并唤醒等待者)。
计数信号量的计数可为任意非负整数,表示可用资源数量,常用于限制并发数(如连接池);二值信号量计数仅为 0 或 1,行为接近互斥锁,但与互斥锁不同,它没有所有权概念,可由不同线程执行 P 和 V,因此也可用于线程间的顺序通知。
生产者-消费者、读者-写者、哲学家就餐等经典并发问题都以信号量为标准教学解法。
POSIX 提供 sem_wait/sem_post 接口,System V 有独立的信号量集;Linux 内核中的 semaphore 与 rw_semaphore 用于可睡眠的互斥场景。现代应用层更多使用互斥锁与条件变量,但信号量在限流与资源计数场景仍不可替代。

登录 后参与讨论
暂无讨论,来发表第一条评论吧