程序的關鍵部分(Critical Section)是指在多線程或多進程環境中,需要互斥訪問的那段代碼或區域。在這段代碼中,只有一個線程或進程可以進入並執行,以避免競爭條件(Race Conditions)和數據不一致性。關鍵部分的主要目的是確保共享資源的正確性和一致性。
互斥性(Mutual Exclusion):在任意時刻,最多只能有一個線程或進程進入關鍵部分,確保沒有其他線程或進程能同時進入。
進入條件(Entry Condition):當某個線程或進程想要進入關鍵部分時,必須滿足一定的條件,這些條件通常由同步機制(如鎖、信號量)來實現。
退出條件(Exit Condition):當一個線程或進程完成對關鍵部分的訪問後,必須釋放資源,使其他等待的線程或進程能夠進入。
鎖(Locks):通過鎖機制來保證只有一個線程能夠進入關鍵部分。當一個線程獲取到鎖時,其他線程必須等待鎖的釋放。
信號量(Semaphores):使用信號量來控制進入關鍵部分的線程數量。二元信號量(binary semaphore)通常用於互斥,而計數信號量(counting semaphore)則可允許多個線程同時訪問。
自旋鎖(Spinlocks):當一個線程嘗試獲取鎖時,如果鎖已經被其他線程持有,它會在等待時不斷自旋,直到鎖被釋放。
屏障(Barriers):屏障用於同步多個線程,保證所有線程都達到某一點後才繼續執行。