第乙個createevent
函式功能:建立事件
函式原型:
handle
createevent(
lpsecurity_attributes
lpeventattributes,
bool
bmanualreset,
bool
binitialstate,
lpctstr
lpname );
第乙個引數表示安全控制,一般直接傳入
null
。第二個引數確定事件是手動置位還是自動置位,傳入
true表示手動置位
,傳入false表示自動置位
。如果為自動置位,則對該事件呼叫
waitforsingleobject()
後會自動呼叫
resetevent()
使事件變成未觸發狀態。打個小小比方,手動置位事件相當於教室門,教室門一旦開啟(被觸發),所以有人都可以進入直到老師去關上教室門(事件變成未觸發)。自動置位事件就相當於醫院裡拍
x光的房間門,門開啟後只能進入乙個人,這個人進去後會將門關上,其它人不能進入除非門重新被開啟(事件重新被觸發)。
第三個引數表示事件的初始狀態,傳入
trur
表示已觸發。
第四個引數表示事件的名稱,傳入
null
表示匿名事件。
第二個openevent
函式功能:根據名稱獲得乙個事件控制代碼。
函式原型:
handle
openevent(
dword
dwdesiredaccess
, 第乙個引數表示訪問許可權,對事件一般傳入
event_all_access
bool
binherithandle
, 事件控制代碼繼承性,一般傳入
true
即可。lpctstr
lpname //名稱 不同程序中的
各執行緒可以通過名稱來確保它們訪問同乙個事件。
);第三個
setevent
函式功能:觸發事件
函式原型:
bool
setevent
(handle
hevent);
函式說明:每次觸發後,必有乙個或多個處於等待狀態下的執行緒變成可排程狀態。
第四個resetevent
函式功能:將事件設為末觸發
函式原型:
bool
resetevent
(handle
hevent);
closehandle()就可以完成清理與銷毀了。
訊號量第乙個createsemaphore
函式功能:建立訊號量
函式原型:
handle
createsemaphore(
lpsecurity_attributes
lpsemaphoreattributes
,引數表示安全控制,一般直接傳入
null
。long
linitialcount
, 初始資源數量。
long
lmaximumcount
, 引數表示最大併發數量。
lpctstr
lpname 訊號量的名稱,傳入
null
表示匿名信號量。
);第二個
opensemaphore
函式功能:開啟訊號量
函式原型:
handle
opensemaphore(
dword
dwdesiredaccess
,引數表示訪問許可權,對一般傳入
semaphore_all_access
bool
binherithandle
,訊號量控制代碼繼承性,一般傳入
true
即可。lpctstr
lpname不同程序中的
各執行緒可以通過名稱來確保它們訪問同乙個訊號量
);第三個
releasesemaphore
函式功能:遞增訊號量的當前資源計數
函式原型:
bool
releasesemaphore(
handle
hsemaphore
, 訊號量的控制代碼。
long
lreleasecount
, 第二個引數表示增加個數,必須大於
0且不超過最大資源數量。
lplong
lppreviouscount 傳出先前的資源計數,設為
null
表示不需要傳出。
);注意:
當前資源數量大於0,表示訊號量處於觸發,等於0表示資源已經耗盡故訊號量處於末觸發。在對訊號量呼叫等待函式時,等待函式會檢查訊號量的當前資源計數,如果大於0(即訊號量處於觸發狀態),減1後返回讓呼叫執行緒繼續執行。乙個執行緒可以多次呼叫等待函式來減小訊號量。
最後乙個 訊號量的清理與銷毀
由於訊號量是核心物件,因此使用closehandle()就可以完成清理與銷毀了。
C 多執行緒 執行緒同步事件
1 事件 事件是核心物件,多用於執行緒間通訊,可以跨程序同步 2 事件使用 1 建立事件 handle createevent lpsecurity attribute slpeventattributes,安全控制,一般直接傳入null bool bmanualreset,確定事件是手動還是自動 ...
多執行緒 同步 Mutex互斥量
建立互斥量 handle createmutex lpsecurity attributes lpmutexattributes,安全性 bool binitialowner,true 建立執行緒擁有互斥量,false 相反 lpctstr lpname 執行緒名字,如果為null表示匿名,否則為命...
Linux 多執行緒同步(互斥量)
threadrace.c include include include include int myglobal pthread mutex t work mutex pthread mutex initializer 定義互斥量 初始化互斥量 pthread mutex init work mu...