MFC 執行緒同步 CSemaphore類使用

2021-07-24 16:58:29 字數 1101 閱讀 7594

csemaphore類

當需要乙個計數器來限制可以使用某個資源的執行緒數目時,即csemaphore類物件。csemaphore類的乙個物件儲存了對當前訪問某一指定資源的執行緒的計算值,該計數值是當前還可以使用該資源的執行緒的數目。如果這個計數達到了零,則所有對這個csemaphore類物件所控制的資源的訪問嘗試都被放入到乙個佇列中等待,直到超時或計數值不為零時為止。

乙個執行緒被釋放可以訪問被保護的資源是計數值減1,乙個執行緒完成了共享資源的訪問時,計數值增1。

csemaphore(long linitialcount = 1,long lmaxcount = 1,lpcstr pstrname= null,

lpsecurity_attributes lpsaattributes = null);

linitialcount:訊號量物件的初始計數值,可訪問執行緒數目的初始值

lmaxcount:訊號量物件計數值的最大值,即同一時刻可訪問資源的執行緒最大數目。

如下程式:同時向edit控制項中寫『a』,『b』,『c』,由於設定共享資源每次最多可由2個執行緒訪問,則第1個執行緒和第2個執行緒開始往陣列中寫資料,等它們停下來後,第三個執行緒開始往陣列中寫資料。

出現這種情況是因為第1個執行緒和第2個執行緒首先占有了資源的控制權。而訊號量被設定成同一時刻只能有兩個執行緒訪問資源,所以第3個執行緒必須等待直到前兩個執行緒釋放對訊號量的所有權。 

uint writea(lpvoid pparam);

uint writeb(lpvoid pparam);

uint writec(lpvoid pparam);

//建立執行緒

void cthreadcsemaphoredlg::onbnclickedstart()

uint writea(lpvoid pparam)

semaphore.unlock();

return 0;

}uint writeb(lpvoid pparam)

semaphore.unlock();

return 0;

}uint writec(lpvoid pparam)

semaphore.unlock();

MFC 執行緒同步

使用waitforsingleobject函式來等待乙個核心物件變為已通知狀態 dword waitforsingleobject handle hobject,指明乙個核心物件的控制代碼 dword dwmilliseconds 等待時間 該函式需要傳遞乙個核心物件控制代碼,該控制代碼標識乙個核心...

MFC多執行緒 執行緒同步

執行緒間的同步 常用的同步物件 1 臨界區 critical section 2 互斥 mutex 3 訊號量 semaphore 4 事件 event mfc提供了幾種同步類和同步輔助類,包含在afxmt.h中 1 同步物件基類 csyncobject 抽象類,為win32中的同步物件提供通用效能...

MFC多執行緒同步方法

mfc提供了多種同步物件,下面我們只介紹最常用的四種 a 使用 ccriticalsection 類 當多個執行緒訪問乙個獨占性共享資源時,可以使用 臨界區 物件。任一時刻只有乙個執行緒可以擁有臨界區物件,擁有臨界區的執行緒可以訪問被保護起來的資源或 段,其他希望進入臨界區的執行緒將被掛起等待,直到...