鎖和信號量最大的區別就是:鎖嚴格要求 “誰占用誰釋放”,而信號量允許 “一個任務 / 線程釋放,另一個任務 / 線程獲取”。
特性 | 互斥鎖(Mutex) | POSIX 信號量(Semaphore) |
---|---|---|
初始狀態 | 初始為 “鎖定”(PTHREAD_MUTEX_INITIALIZER ),需顯式獲取(pthread_mutex_lock )。 | 初始值可自定義: - 用于互斥時初始值為 1(二進制信號量); - 用于限制資源數量時初始值為 N(如 3 表示 3 個資源)。 |
核心操作 | - pthread_mutex_lock :獲取鎖(若已被占用則阻塞);- pthread_mutex_unlock :釋放鎖(僅持有者可調用)。 | - sem_wait :計數器減 1(若為 0 則阻塞);- sem_post :計數器加 1(喚醒等待線程)。 |
計數器邏輯 | 無顯式計數器,僅通過 “鎖定 / 解鎖” |