多執行緒 同步功能 事件,資訊量

2021-06-23 09:28:15 字數 2611 閱讀 5489

第乙個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...