信號量與互斥
信號量是一種數據結構,用於確保在並行編程環境中多個進程不會同時訪問一個公共資源或一個關鍵部分。信號量用於避免死鎖和爭用情況。互斥對象(互斥對象)也用於避免多個併發進程同時訪問一個公共資源。
什麼是信號量?
信號量是一種數據結構,用於為關鍵部分提供互斥。信號量主要支持wait(歷史上稱為P)和signal(歷史上稱為V)兩種操作。wait操作阻塞一個進程,直到信號量打開,信號操作允許另一個進程(線程)進入。每個信號量都與一個等待進程的隊列相關聯。當等待操作被線程調用時,如果信號量是打開的,線程可以繼續。如果等待操作被線程調用時信號量關閉,則線程被阻塞,它必須在隊列中等待。signal操作打開一個信號量,如果隊列中已經有線程在等待,則允許該進程繼續,如果隊列中沒有等待的線程,則會為下一個線程記住該信號。有兩種類型的信號量稱為互斥信號量和計數信號量。互斥信號量允許對一個資源進行單一訪問,計數信號量允許多個線程訪問一個資源(該資源有多個可用單元)。
什麼是互斥體?
當計算機應用程序啟動時,它將創建一個互斥體並將其附加到資源上。當資源被線程使用時,它被鎖定,其他線程無法使用它。如果另一個線程想要使用相同的資源,它將必鬚髮出請求。然後將線程放入隊列中,直到第一個線程完成。當第一個線程使用完資源後,鎖將被移除,隊列中等待的線程可以訪問該資源。如果隊列中有多個線程在等待,它們將被輪流授予訪問權限。實際上,當互斥體在多個線程之間交替訪問一個資源時,當多個線程同時消耗一個資源時,它將是可見的。但是在內部只有一個線程在給定的時間訪問資源。
信號量和互斥有什麼區別?