多线程(C++)临界区Critical Sections
一 、Critical Sections(功能與Mutex相同,保證某一時刻只有一個線程能夠訪問共享資源,但是不是內核對象,所以訪問速度比Mutex快,但是沒有等待超時的功能,所以有可能導致死鎖,使用要小心)
?
??? 當多個線程訪問一個獨占性共享資源時,可以使用“臨界區”對象。任一時刻只有一個線程可以擁有臨界區對象,擁有臨界區的線程可以訪問被保護起來的資源或代碼段,其他希望進入臨界區的線程將被掛起等待,直到擁有臨界區的線程放棄臨界區時為止,這樣就保證了不會在同一時刻出現多個線程訪問共享資源。
CCriticalSection類的用法非常簡單,步驟如下:
???? 1) 因為Critical Sections不是內核對象,所以只能用來統一進程內線程間的同步,不能用來多個不同進程間的線程的同步。
???? 2) 如果在Critical Sections中間突然程序crash或是exit而沒有調用LeaveCriticalSection,則結果是改線程所對應的內核不能被釋放,該線程成為死線程。
???? 3) 要比其他的內核對象的速度要快。
二、使用CriticalSections的簡單實例,Stack在push的時候可以分為3個步驟,看下面的代碼,但是如果在第2步后此線程中斷切換到其他的線程,其他的線程push后再返回執行時,此線程繼續執行,這樣有可能剛才其他線程push就會被覆蓋了,在stack里找不到了。(下面的代碼在 debug下使用了CriticalSection,release下可能有問題)
轉載于:https://www.cnblogs.com/ct0421/p/4024416.html
總結
以上是生活随笔為你收集整理的多线程(C++)临界区Critical Sections的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 取奇偶数
- 下一篇: php如何读出xml的节点内容 两个例子