Linux 進程間通信之-POSIX 信號量

信號量根據實現分為System V 信號量 與POSIX 信號量 兩種。這裡就不在贅述什麼是信號量【https://baike.baidu.com/item/linux進程間信號量/4211510】了,也有很多文章介紹了他們的概念,本文主要介紹

POSIX 信號量與POSIX的一些不同之處。

一、POSIX 信號量的優勢與不足

POSIX 信號量比System V信號量優越的地方:性能更好。System v信號量每次操作信號量必然會從用戶態陷入到內核態頻繁的加、解鎖時間上的開銷是很可觀的。POSIX 信號量只要不存真正的兩個線程競爭一把鎖的情況,那麼修改信號量就只是用戶態的操作,並不會牽扯到內核。

  1. POSIX 信號量創建和初始化合二為一,解決了system v中可能出現的競爭條件問題
  2. POSIX信號量的修改值的接口一次只能修改一個信號值,而system v則可以一次修改多個信號量
  3. POSIX 信號量修改值得接口一次只能將信號量加1或者減1,而system v 則可以加上或者減去大於1的值
  4. posix 信號量沒有提供一個等待信號量變為0的接口,而system v則通過semop 提供了這樣的功能
  5. POSIX 信號量的實現沒有提供UNDO操作,而system v 則提供了該操作
  6. 當進程異常消亡,system v會對進程清理信號量資源的工作,而posix 則沒有改功能

二、POSIX 信號量的api

頭文件 #include <semaphore.h>

Linux 進程間通信之-POSIX 信號量

FIG 1


分享到:


相關文章: