信號量集機制
信號量與信號量集
) 信號量
在UNIX系統中規定每個信號量有一個可用來表示某類資源數目的信號量值和一個操作值該操作值可為正整數零或負整數三種情況之一傳統的信號量機構是對信號量施加wait及signal操作而在UNIX系統中則並未采用wait及signal而是利用semop( )系統調用對指定的信號量施加操作此外還可利用semget( )來建立信號量及利用semctl( )系統調用對信號量進行操縱
) 信號量集
在一個信號量集中通常都包含有若干個信號量對這組信號量的操作方式應當是原子操作方式此即把對這組信號量視為一個整體要麼全做要麼全不做如果核心不能完成對這組所有信號量的操作則核心應將已經操作過的信號量恢復到操作前的狀態這樣便可實現要麼全做要麼全不做的原子操作方式
信號量集的數據結構
) 信號量表
信號量表是信號量的結構數組在系統Ⅴ中每個信號量用一個信號量結構表示其中包括信號量值semval及最近一次對信號量進行操作的進程標識符sempid等待該信號量值增加的進程數等
) 信號量集表
系統調用
在信號量機制中同樣也提供了若干條系統調用分別用於對信號量執行各種操作
) semget( )系統調用
用戶可利用該系統調用來建立信號量集用戶應提供信號量的名字信號量集中信號量的數目等若信號量集的建立成功將返回信號量集的描述符semid
) semop( )系統調用
該系統調用可用來對信號量集進行操作用戶需提供信號量集的描述符信號量的編號即信號量在信號量集中的序號以及所要施加操作的操作數semop內核根據semop來改變信號量的值當semop為正值時便將該正值加到信號量的值上當semop為負值時若信號量的值大於semop的絕對值應將該負值加到信號量值上否則操作失敗內核將已經操作過的信號量恢復到該系統調用開始執行時的值
——返回教材目錄
了解更多計算機相關基礎課程視頻
From:http://tw.wingwit.com/Article/program/czxt/201311/24297.html