2015-11-04 114 views
0

考慮這個簡單的代碼:爲什麼即使您擁有互斥鎖,互斥鎖try_lock也會返回false?

boost::mutex m; 
m.lock(); 
bool locked = m.try_lock(); 
std::cout<< (!locked? "Can't use lock" : "Can use lock.")<<std::endl; 
system("pause"); 

代碼打印的Can't use lock。這是一個問題,因爲在我的程序中,只有當線程對鎖擁有獨佔權時,我才需要執行異步操作。所以:

  1. 爲什麼try_lock在我擁有該互斥鎖時返回false?
  2. 如何創建僅由擁有該鎖的線程執行的代碼塊?
+1

http://www.boost.org/doc/libs/1_31_0/libs/thread/doc/recursive_mutex.html –

回答

-1

您的代碼設計糟糕。任何使用遞歸互斥體的嘗試都是一個設計錯誤的指示。在你的代碼中,你需要保護你所需要的資源,如果你的線程當前擁有資源或者沒有資源,那麼對你來說無關緊要。

+0

問題是資源必須通過異步例程進行保護。也就是說,它不能在一個功能中發生。 –

+0

糟糕的設計。這種方式是一種真正的快速死鎖方式。資源上的每個鎖應具有可預測的使用期限。 – SergeyA

+0

你好,剛來這裏告訴你,你是對的,設計很糟糕。但是,你的回答應該是一個評論,而不是回答。 –