程序中線程同步的四種常用方式:
一、 臨界區(ccriticalsection)
當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或**段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。具體應用方式:
1、 定義臨界區物件ccriticalsection g_criticalsection;
2、 在訪問共享資源(**或變數)之前,先獲得臨界區物件,g_criticalsection.lock();
3、 訪問共享資源後,則放棄臨界區物件,g_criticalsection.unlock();
二、 事件(cevent)
事件機制,則允許乙個執行緒在處理完乙個任務後,主動喚醒另外乙個執行緒執行任務。比如在某些網路應用程式中,乙個執行緒如a負責偵聽通訊埠,另外乙個執行緒b負責更新使用者資料,利用事件機制,則執行緒a可以通知執行緒b何時更新使用者資料。每個cevent物件可以有兩種狀態:有訊號狀態和無訊號狀態。cevent類物件有兩種型別:人工事件和自動事件。
自動事件物件,在被至少乙個執行緒釋放後自動返回到無訊號狀態;
人工事件物件,獲得訊號後,釋放可利用執行緒,但直到呼叫成員函式reset()才將其設定為無訊號狀態。在建立cevent物件時,預設建立的是自動事件。
1、12
3
4
cevent(
bool
binitiallyown=false,
bool
bmanualreset=false,
lpctstr
lpszname=null,
lpsecurity_attributes lpsaattribute=null);
2將cevent類物件的狀態設定為有訊號狀態。如果事件是人工事件,則cevent類物件保持為有訊號狀態,直到呼叫成員函式resetevent()將其重新設為無訊號狀態時為止。如果為自動事件,則在setevent()後將事件設定為有訊號狀態,由系統自動重置為無訊號狀態。、bool cevent
::setevent();
3將事件的狀態設定為無訊號狀態,並保持該狀態直至setevent()被呼叫為止。由於自動事件是由系統自動重置,故自動事件不需要呼叫該函式。、bool cevent
::resetevent();
一般通過呼叫waitforsingleobject()函式來監視事件狀態。
三、 互斥量(cmutex)
互斥物件和臨界區物件非常相似,只是其允許在程序間使用,而臨界區只限制與同一程序的各個執行緒之間使用,
但是更節省資源,更有效率。
四、 訊號量(csemphore)
當需要乙個計數器來限制可以使用某共享資源的執行緒數目時,可以使用「訊號量」物件。csemaphore類物件儲存了對當前訪問某乙個指定資源的執行緒的計數值,該計數值是當前還可以使用該資源的執行緒數目。如果這個計數達到了零,則所有對這個csemaphore類物件所控制的資源的訪問嘗試都被放入到乙個佇列中等待,直到超時或計數值不為零為止。
csemaphore 類的建構函式原型及引數說明如下:
1
2
3
4
5
6
csemaphore(
long
linitialcount = 1,
long
lmaxcount = 1,
lpctstr
pstrname = null,
lpsecurity_attributes lpsaattributes = null
);
一般是將當前可用資源計數設定為最大資源計數,每增加乙個執行緒對共享資源的訪問,當前可用資源計數就減1,只要當前可用資源計數大於0,就可以發出訊號量訊號。如果為0,則放入乙個佇列中等待。執行緒在處理完共享資源後,應在離開的同時通過releasesemaphore()函式將當前可用資源數加1。
1
2
3
bool
releasesemaphore(
handle
hsemaphore,
// hsemaphore:訊號量控制代碼
long
lreleasecount,
// lreleasecount:訊號量計數值
lplong
lppreviouscount
// 引數一般為null);
執行緒同步的幾種方式
程序中線程同步的四種常用方式 1 臨界區 ccriticalsection 當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。具體應用方式 1 定義臨界區物件ccritica...
執行緒同步的幾種方式
程序中線程同步的四種常用方式 1 臨界區 ccriticalsection 當多個執行緒訪問乙個獨占性共享資源時,可以使用臨界區物件。擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他執行緒若想訪問,則被掛起,直到擁有臨界區的執行緒放棄臨界區為止。具體應用方式 1 定義臨界區物件ccritica...
執行緒同步的幾種方式
1.同步 就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回,同時其它執行緒也不能呼叫這個方法。2.執行緒同步 當有乙個執行緒在對記憶體進行操作時,其他執行緒都不可以對這個記憶體位址進行操作,直到該執行緒完成操作,其他執行緒才能對該記憶體位址進行操作,而其他執行緒處於等待狀態。在多執行緒程...