線程是輕量級進程,共享進程資源,因此不需要專門的通信機制,但必須有同步機制協調對共享資源的訪問。本文概述線程同步的兩大核心工具:信號量與互斥量。
同步是指多線程按預定順序協調運行,避免競態條件。進程同步與線程同步理論相同,但實現機制不同:
由Dijkstra提出,核心是P/V原子操作:
信號量值代表可用資源數。初始值決定並發訪問能力:
線程間使用的信號量為無名信號量(內存中),進程間常用有名信號量(文件系統中)。
專為線程互斥設計,不適用於進程間(除非置於共享內存並設置屬性)。
| 特性 | 信號量 | 互斥量 |
|---|---|---|
| 核心語義 | 資源計數/信號通知 | 互斥訪問/所有權 |
| 適用範圍 | 線程間、進程間 | 主要線程間(共享內存可進程間) |
| 值範圍 | 非負整數 | 二值(鎖/解鎖) |
| 釋放權限 | 任意線程可V操作 | 只有持有者可解鎖 |
| 典型場景 | 生產者消費者、資源池、事件通知 | 保護臨界區、數據結構互斥訪問 |
| 性能 | 較重(內核態) | 較輕(用戶態快速鎖+內核態阻塞) |
pthread_mutex_trylock、超時機制。lock_guard/unique_lock;C語言用 goto cleanup 或宏封裝確保解鎖。線程同步是並發編程的基石。互斥量保護數據,信號量協調流程。理解二者語義差異,結合條件變量(等待條件)、讀寫鎖(讀多寫少),方能構建高效正確的並發程序。