簡體   English   中英

如何檢查是否未獲取互斥鎖?

[英]How to check if a mutex is not acquired?

我想檢查互斥鎖是否空閑且未獲取。

我嘗試使用pthread_mutex_trylock(mutex_object);

但如果獲取互斥鎖則返回0 ,錯誤返回-1

如果沒有獲得互斥鎖怎么辦? 它會為它返回任何值嗎?

pthread_mutex_trylock不返回“-1表示錯誤”。 它從errno.h的可能值返回“錯誤”代碼。 其中一個, EBUSY ,意味着另一個線程已經擁有鎖。 除非您的程序中存在嚴重錯誤,否則不應該從pthread_mutex_trylock觀察到任何其他錯誤代碼。

請注意,對於遞歸互斥鎖,返回值0不區分互斥鎖先前已解鎖的情況和調用線程已擁有它的情況。 在任何情況下,如果pthread_mutex_trylock返回0,你是負責通過解鎖它pthread_mutex_unlock因為你成為所有者(或在遞歸的情況下,由1您鎖定計數增加)在成功pthread_mutex_trylock

pthread_mutex_trylock獲取調用線程的互斥鎖,如果互斥鎖當前已鎖定,則返回EBUSY 這是測試互斥鎖是否被鎖定的唯一有意義的方法。 在多線程環境中,僅檢查“是其他人持有此互斥鎖”的函數是無用的,因為在函數返回后,另一個線程可以立即獲取互斥鎖。

您通常使用pthread_mutex_lock,trylock是一種更深奧的非阻塞變體,用於例如在優先級倒置場景中避免死鎖。 如果您獲得0返回,則互斥鎖是免費的,現在已被您鎖定。

暫無
暫無

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

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