2014-05-16 79 views
0

我需要編寫 自行車 函數將等於pthread_mutex_trylock(...)
我該怎麼做?
我找不到這個函數的源代碼,即使我找到它們,它們也太複雜,無法複製粘貼。不過,無論如何,我都會爲此鏈接讚不絕口。
我需要編寫一個簡單的函數,如果它沒有被鎖定就可以使用互斥鎖,否則返回。Pthreads。如何檢查互斥鎖已鎖定

+1

'int myTryLock(pthread_mutex_t * mutex){return pthread_mutex_trylock(mutex); }'。認真......你想解決什麼問題? – mah

+0

@mah,這是學習任務。我不能使用trylock :( – Alendorff

+2

http://fossies.org/dox/glibc-2.19/pthread__mutex__trylock_8c_source.html有源代碼,它有相當多的代碼,但它是一個單一的函數,它以不同的方式完成它的任務 – mah

回答

1

我的感覺是,你沒有提供足夠的信息在你的問題。 glibc中實際的pthread mutex實現是一個非常複雜的野獸(它意味着支持許多用例和策略),並且很難適用於訓練任務。

因此,您實際上可能需要做一些不同的事情,然後再深入到pthread互斥體內部。

一種可能性:使用pthread_mutex_trylock的替代方法可能已足夠。這種替代方案肯定存在,被稱爲pthread_mutex_timedlock(用0超時調用它)。另一種可能性:您可能需要使用您自己的互斥體實現(基於低級原語,如Linux上的futex)。這不是太複雜:http://locklessinc.com/articles/mutex_cv_futex/

+0

Timedlock看起來像一個解決方案,不知道它是否像我的老師,但我可能會用這種方式 – Alendorff

+0

最後,我使用pthread_mutex_destroy - 如果成功或重新開始互斥鎖,如果不成功: ) – Alendorff

+0

我將在此網站上提供一個手冊頁面:「嘗試銷燬鎖定的互斥鎖導致未定義的行爲」。另外,如果另一個線程試圖搶奪「destroy」和「init」之間的互斥體,會發生什麼?另一個好的方法是:如果互斥體被解鎖,但是由pthread_cond_wait()引用呢? – oakad