信号量
概述
信号量(Semaphore)是由荷兰计算机科学家Edsger W. Dijkstra发明的一种同步原语,用于解决并发编程中的同步和互斥问题。信号量通过计数器和等待/通知机制协调多个进程或线程对共享资源的访问。
关键内容
-
基本操作:信号量有两个原子操作:P操作(荷兰语Probeer,意为"尝试",也称wait)和V操作(荷兰语Verhoog,意为"增加",也称signal)。P操作减少信号量计数器,若计数器小于0则阻塞进程;V操作增加计数器并唤醒等待进程。
-
应用类型:分为二进制信号量(Binary Semaphore,取值0或1,用于互斥访问)和计数信号量(Counting Semaphore,取值为任意非负整数,用于资源计数)。
-
使用场景:广泛应用于操作系统、多线程编程中,用于解决临界区问题、生产者-消费者问题、读者-写者问题等经典的并发同步问题。
-
重要性:信号量是并发编程的基础概念之一,为后续的锁、条件变量等同步机制奠定了理论基础。
来源
- 操作系统概念 — 教科书
- 原始论文分析 — raw/books/计算机科学/06-dijkstra-goto-considered-harmful.md(提及Dijkstra发明)
相关
- Edsger W. Dijkstra — invented_by
- 并发编程 — used_in
- 操作系统 — applied_in
- 同步原语 — classified_as