如果還不知道建立子程序,參考:
win中建立程序
正文開始:
c語言windows環境下::
建立訊號量
handle createsemaphore
( lpsecurity_attributes lpsemaphoreattributes,
// 安全屬性指標
long linitialcount,
// 初始計數
long lmaximumcount,
// 最大計數
lpctstr lpname // 物件名指標);
引數lmaximumcount是乙個有符號32位值,定義了允許的最大資源計數,最大取值不能超過4294967295。
lpname引數可以為建立的訊號量定義乙個名字,由於其建立的是乙個核心物件,因此在其他程序中可以通過該名字而得到此訊號量,這個名字非常重要,你在其他程序中可以直接通過這個名字找到這個訊號量。
開啟訊號量
handle opensemaphore
( dword dwdesiredaccess,
// 訪問標誌
bool binherithandle,
// 繼承標誌
lpctstr lpname // 訊號量名!!!!!!!!!);
這裡就是在其他程序中通過訊號量名字進行索引!!!!
釋放訊號量
bool releasesemaphore
( handle hsemaphore,
// 訊號量控制代碼
long lreleasecount,
// 計數遞增數量
lplong lppreviouscount // 先前計數
);
等待訊號量(相當於p操)
waitforsingleobject()//等乙個
waitformultipleobjects()//等多個
主要用在試圖進入共享資源的執行緒函式入口處,主要用來判斷訊號量的當前可用資源計數是否允許本執行緒的進入。
注意:實際上的p操作是在程序得到這個訊號量的時候就完成的,並不是上面兩個相當於p操作的函式完成的。p操作:waitforsingleobject(訊號量引用,等待時間)
v操作:releasesemaphore(訊號量引用,加的值,原始值)
例如現在有乙個s1訊號量:
waitforsingleobject
(s1,infinite)
;//等待無限時長
releasesemaphore
(s1,1,null);
//第三個引數原始值不用管
1.在司機程序中建立售票員程序,然後通過pv操作進行通訊
2.訊號量在哪定義呢?在司機裡面,並且定義的時候盡量取個名字,這樣在售票員子程序中可以直接通過名字獲取。
code:
//司機程序**
#include
#include
handle s1 =
createsemaphore
(null,0
,1,"driver_s");
//司機的訊號
handle s2 =
createsemaphore
(null,0
,1,"conductor_s");
//乘務員的訊號
//!!!!!!!!!!!!!!你看,這裡取了名字,在其他程序中可以直接用opensemaphore()來對名字進行索引!!!
intmain()
;//記錄結構體有多大,必須要引數
process_information pi;
//程序id,程序控制代碼,執行緒id,執行緒控制代碼存在於這個結構體
bool flag =
createprocess
(null
,lppath,
null
,null
,false,0,
null
,null
,&si,
&pi)
;while
(!flag)
flag =
createprocess
(null
,lppath,
null
,null
,false,0,
null
,null
,&si,
&pi)
;//防止乘務員程序建立失敗
//司機程序
while
(true)
}
//乘務員程序**
#include
#include
handle s1 =
opensemaphore
(semaphore_all_access, false,
"driver_s");
//使用opensemaphore函式獲得司機訊號量
handle s2 =
opensemaphore
(semaphore_all_access, false,
"conductor_s");
//獲取乘務員訊號量
//你看,在這裡就是通過訊號量的名字獲取的索引!!!!!!!
intmain()
return0;
}
執行結果:
作業系統中的PV操作
pv操作由p操作原語和v操作原語組成 原語是不可中斷的過程 對訊號量進行操作,具體定義如下 p s 將訊號量s的值減1,即s s 1 如果s 0,則該程序繼續執行 否則該程序置為等待狀態,排入等待佇列。v s 將訊號量s的值加1,即s s 1 如果s 0,則該程序繼續執行 否則釋放佇列中第乙個等待訊...
學 生活中的PV操作
之前寫過作業系統的文章,然後最近發現少了點什麼,仔細檢查發現,沒寫pv操作,那麼我們接下來就單獨為pv操作寫一篇部落格,讓大家不再懼怕pv操作,我們深入淺出的分析,讓大家輕鬆學習pv操作。學習pv操作之前,我們首先來了解兩個很基礎的概念 同步 互斥 同步 其實說同步還不如說 協作 就是我們的目標只有...
訊號量中的PV操作
一 訊號量的概念 1 訊號量的型別定義 訊號量 semaphore 的資料結構為乙個值和乙個指標,指標指向等待該訊號量的下乙個程序。訊號量的值與相應資源的使用情況有關。當它的值大於0時,表示當前可用資源的數量 當它的值小於0時,其絕對值表示等待使用該資源的程序個數。注意,訊號量的值僅能由pv操作來改...