簡體   English   中英

鎖,互斥鎖和關鍵部分之間的區別

[英]Difference between Locks, Mutex and Critical Sections

關於Mutex和Critical部分之間的區別存在一個現有問題,但它也沒有涉及Locks。

所以我想知道關鍵部分是否可以用於進程之間的線程同步。

也就是信號狀態和非信號狀態的含義

在Windows中,(主要)在用戶模式下實現關鍵部分,並且互斥鎖將上下文切換到內核模式(這很慢)。 如果線程在擁有互斥鎖時終止,則說該互斥鎖被放棄。 互斥鎖的狀態設置為發出信號,下一個等待的線程獲得所有權。 在具有關鍵部分的相同情況下,所有其他線程將保持阻塞狀態。 無法命名關鍵部分,因此您無法使用它們來同步多個進程。

關鍵部分不是內核對象。 它們沒有任何Handle標識。 它們只能用於同步屬於同一進程的線程。 它們不能用於整個過程的同步。

CSingleLock(我假設您將此稱為鎖,在此上下文中)是使用RAII概念的包裝類。 它可以幫助您獲取線程同步對象(在其構造函數中)並以簡單的方式調用Lock和Unlock API。 (隱藏它正在使用的同步對象的所有內部細節)。

CSingleLock與Critical部分一起使用時,不能跨進程使用。 可以將Mutex用於此目的。

當線程獲取Mutex並且沒有其他線程可以獲取互斥鎖時,則稱互斥鎖的狀態處於非Signeled狀態。 如果Mutex可用且沒有獲得線程,則它處於Signeled狀態。

CriticalSections正在進行中。 命名互斥鎖可以跨進程使用

鎖是一個通用術語,因此我不知道你指的是哪個平台。 例如,在C#中,一個鎖原語是一個臨界區。

1)Critical Section是User和Interlocked-operations之間的橋梁。 它使用inetrlocked-interchange操作來鎖定和解鎖線程。 它比互斥鎖更快。

2)互斥是一個核心對象。 它工作速度不快但有一些優點。 首先,可以跨進程使用已命名的互斥鎖。 其次,如果線程被終止,則由該線程鎖定的互斥鎖被解鎖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM