臨界代碼

每個進程中訪問臨界資源的那段代碼稱為臨界區(Critical 每個進程中訪問臨界資源的那段程式稱為臨界區(Critical 如已有進程進入自己的臨界區,則其它所有試圖進入臨界區的進程必須等待。

多用戶系統上,多進程系統上,通常程式中存在部分臨界代碼。我們需要確保只有一個進程或執行執行緒進入臨界代碼並擁有對資源獨占式的訪問權。
不論是硬體臨界資源,還是軟體臨界資源,多個進程必須互斥地對它進行訪問。每個進程中訪問臨界資源的那段代碼稱為臨界區(Critical Section)。
每個進程中訪問臨界資源的那段程式稱為臨界區(Critical Section)(臨界資源是一次僅允許一個進程使用的共享資源)。每次只準許一個進程進入臨界區,進入後不允許其他進程進入。不論是硬體臨界資源,還是軟體臨界資源,多個進程必須互斥地對它進行訪問。
多個進程中涉及到同一個臨界資源的臨界區稱為相關臨界區
進程進入臨界區的調度原則是:
①如果有若干進程要求進入空閒的臨界區,一次僅允許一個進程進入。
②任何時候,處於臨界區內的進程不可多於一個。如已有進程進入自己的臨界區,則其它所有試圖進入臨界區的進程必須等待。
③進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入自己的臨界區。
④如果進程不能進入自己的臨界區,則應讓出CPU,避免進程出現“忙等”現象。
如果有多個執行緒試圖同時訪問臨界區,那么在有一個執行緒進入後其他所有試圖訪問此臨界區的執行緒將被掛起,並一直持續到進入臨界區的執行緒離開。臨界區在被釋放後,其他執行緒可以繼續搶占,並以此達到用原子方式操作共享資源的目的。
臨界區在使用時以CRITICAL_SECTION結構對象保護共享資源,並分別用EnterCriticalSection()和LeaveCriticalSection()函式去標識和釋放一個臨界區。所用到的CRITICAL_SECTION結構對象必須經過InitializeCriticalSection()的初始化後才能使用,而且必須確保所有執行緒中的任何試圖訪問此共享資源的代碼都處在此臨界區的保護之下。否則臨界區將不會起到應有的作用,共享資源依然有被破壞的可能。

相關詞條

熱門詞條

聯絡我們