Linux下的關於訊號量的總結《一》

2021-09-25 02:44:17 字數 947 閱讀 4168

red hat enterprise linux server release 7.0 (maipo)

《linux高效能伺服器程式設計》

當多個程序同時訪問系統上的某個資源的時候,比如同時寫資料庫的某條記錄,比如多個人同時搶一張火車票等情況下。我們需要考慮程序的同步問題,以確保任一時刻只有乙個程序可以擁有對資源的獨佔式訪問。

臨界區:訪問臨界資源的**段(程式對資源的訪問的**只是很短的一段,但就是這一段**引發了程序之間的競爭條件。稱為關鍵**段,或者臨界區。所謂對程序同步,也就是確保任一時刻只有乙個程序能進入關鍵**段(臨界區)。)

解決的方式:確保關鍵**段的獨佔式訪問是非常困難的。試圖從語言本身解決併發問題,cpu利用率太低,顯然是不可取的。

訊號量概念的提出是併發程式設計領域邁出的重要一步。它一種特殊的變數,只能取自然數值並且只支援倆種操作 :等待和訊號。就是我們常說的pv操作。荷蘭語單詞   p(passeren 傳遞  進入臨界區)  v(vrijgeven 釋放  退出臨界區)。

如上圖所示,假設我們現在有乙個訊號量sv,當臨界區可以進入時,sv的值為1,程序a和b都有機會進入臨界區。

如果此時,程序a執行了p(sv)操作將sv減1.則程序b若再執行p(sv)操作就會被掛起。直到程序a離開臨界區,並執行v(sv)操作將sv加1,臨界區才重新可進入。如果此時程序b因為等待sv而處於掛起狀態,則將它被喚醒,並進入臨界區。

前倆個引數和前面一樣。最後乙個引數指定要執行的命令。,第四個引數的型別由使用者自己定義,但sys/sem.h標頭檔案給出了它的推薦格式

Linux下的訊號量

linux下的訊號量本身就是臨界資源,所以pv操作都是原子操作。下面是實現二元訊號量的 二元訊號量就是互斥鎖。訊號量 中的semop函式是進行pv操作的核心函式,semop的函式原型為 int semop int semid,struct sembuf sops,unsigned nsops 第乙個...

Linux關於訊號量

dijkstra提出的 訊號量 概念是共發程式設計領域的一項重大進步 訊號量是一種變數,它只能取正整數值,對這些正整數只能進行兩種操作 等待和訊號 用兩種記號來表示訊號量的這兩種操作 p semaphore variable 代表等待 v semaphore variable 代表訊號 首先我們對訊...

關於訊號量

1 訊號量的定義 struct semaphore 在linux中,訊號量用上述結構體表示,我們可以通過該結構體定義乙個訊號量。2 訊號量的初始化 可用void sema init struct semaphore sem,int val 直接建立,其中val為訊號量初值。也可以用兩個巨集來定義和初...