2012-08-01 40 views
3

我是新來的助推線程庫。我有一種情況,我在一個函數中獲取scoped_lock,並需要在被調用者中等待它。boost-threads:如何將scoped_lock傳遞給被調用者?

的代碼上的行:

class HavingMutex 
{ 
    public: 
    ... 
    private: 
    static boost::mutex m; 
    static boost::condition_variable *c; 
    static void a(); 
    static void b(); 
    static void d(); 
} 

void HavingMutex::a() 
{ 
    boost::mutex::scoped_lock lock(m); 
    ... 
    b()   //Need to pass lock here. Dunno how ! 
} 

void HavingMutex::b(lock) 
{ 
    if (some condition) 
    d(lock) // Need to pass lock here. How ? 
} 

void HavingMutex::d(//Need to get lock here) 
{ 
    c->wait(lock); //Need to pass lock here (doesn't allow direct passing of mutex m) 
} 

基本上,在功能d(),我需要訪問範圍的鎖我在a()獲取,這樣我可以在其上等待。我怎麼做 ? (其他一些線程會通知)。

或者我可以直接等待互斥鎖而不是鎖嗎?

任何幫助表示讚賞。謝謝 !

回答

4

傳遞它的參考:

void HavingMutex::d(boost::mutex::scoped_lock & lock) 
{           //^that means "reference" 
    c->wait(lock); 
} 
+0

我嘗試這樣做,認爲這是錯誤的,因爲我的代碼被死鎖。我剛剛發現那是由於別的原因。這似乎工作。謝謝 ! – 2012-08-01 17:42:00

相關問題