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