古詩詞大全網 - 四字成語 - c++多線程問題

c++多線程問題

當多個線程訪問壹個獨占性***享資源時,可以使用“臨界區”對象。任壹時刻只有壹個線程可以擁有臨界區對象,擁有臨界區的線程可以訪問被保護起來的資源或代碼段,其他希望進入臨界區的線程將被掛起等待,直到擁有臨界區的線程放棄臨界區時為止,這樣就保證了不會在同壹時刻出現多個線程訪問***享資源。

CCriticalSection類的用法非常簡單,步驟如下:

 

定義CCriticalSection類的壹個全局對象(以使各個線程均能訪問),如CCriticalSection critical_section;

在訪問需要保護的資源或代碼之前,調用CCriticalSection類的成員Lock()獲得臨界區對象: critical_section.Lock();

在線程中調用該函數來使線程獲得它所請求的臨界區。如果此時沒有其它線程占有臨界區對象,則調用Lock()的線程獲得臨界區;否則,線程將被掛起,並放入到壹個系統隊列中等待,直到當前擁有臨界區的線程釋放了臨界區時為止。

訪問臨界區完畢後,使用CCriticalSection的成員函數Unlock()來釋放臨界區:critical_section.Unlock();

再通俗壹點講,就是線程A執行到critical_section.Lock();語句時,如果其它線程(B)正在執行critical_section.Lock();語句後且critical_section. Unlock();語句前的語句時,線程A就會等待,直到線程B執行完critical_section. Unlock();語句,線程A才會繼續執行。