簡體   English   中英

pthread互斥鎖解鎖為什么同一個線程?

[英]pthread mutex unlock why same thread?

可能是個基本問題?

1)為什么互斥鎖應該在同一個線程上解鎖? 我們有什么具體的理由嗎? 2)如果我理解正確的話,為什么在sem_wait / sem_post實現同樣的情況下保持pthraed_mutex_lock?

在最常見的情況下,互斥鎖設計為極其快速和輕便。 最常見的情況是線程進入臨界區,對共享狀態進行一些快速更改,然后退出臨界區。 如果您有更復雜的要求,請使用更復​​雜的同步對象。 但通常情況下,pthread互斥體將比幾乎任何其他同步原語更輕。

雖然它們有時可以互換使用,但互斥量和信號量具有非常不同的概念基礎。 他們的實際行為的不同程度取決於您的具體應用。

互斥體在概念上具有所有者 - 一個線程,按照約定/契約,程序員將其視為允許訪問互斥鎖保護的資源的唯一線程。 根據互斥體的類型和實現,所有者可以純粹是正式構造,也可以是存儲在互斥對象中的實際字段。 例如,對於遞歸或錯誤檢查互斥鎖,存儲所有者允許擁有互斥鎖的線程獲取其上的附加引用計數,或者如果它仍然保持鎖定時嘗試重新鎖定它則獲取錯誤。

另一方面,信號量基本上是一個反制者。 等待信號量並不一定與獲得使用資源的專有權相關聯,盡管當然這是一個潛在的應用程序(僅采用值0和1的信號量可以用作互斥體)。 信號量可以用於許多其他應用程序,例如等待/信令 - 例如,一個線程可以循環等待信號量N次以等待N線程發布到它,其中每個線程在完成任務時發布。 實際上,也可以用信號量來實現等同於條件變量的同步對象。 它們還可以簡單地用作便攜式原子計數器(用於遞增計數器的過帳),以及許多其他用途。 信號量的“經典”用法是表示N等價資源中可用資源的數量,並且在沒有資源可用時便於等待,但我個人認為我從未使用過這樣的信號量。

現在,如果你想了解POSIX互斥量和信號量的細節,大多數情況下信號量更強大。 它們不僅可用於信號傳輸條件; post操作也是異步信號安全的,這意味着您可以在不受內部信號處理程序限制的情況下使用它。 另一方面,互斥體確實有一個功能無法實現信號量: 強大的互斥鎖屬性,它允許您創建互斥鎖,允許其他線程/進程在線程/進程在保持互斥鎖時終止時進行檢測和恢復(而不僅僅是死鎖)。

因為這是互斥信號量的用途,互斥(除了這個以外的所有其他線程除外)。

它是鎖定資源,以便特定的執行線程可以自由地訪問它。

“常規”信號量(如sem_wait/sem_post )是計數信號量。 您可以指定有N資源可用,而不是根據互斥而只有一個資源。 你當然可以模仿常規變種的互斥信號量但你失去了一些保護措施(例如確保只有主人可以解鎖它)。

暫無
暫無

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

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