我與具有讀取和使用升壓shared_mutex寫一個類中的某些屬性的C++多線程程序工作時的工作情況我應該用owns_lock()函數。程序在執行時會創建一個類A的多個對象實例。這個類A有一個由所有A類對象共享的靜態shared_mutex。如果該類的其中一個屬性需要寫入其中一個對象實例中,則該特定對象實例需要通過將其升級爲唯一鎖來獨佔訪問共享互斥鎖。但是,在這樣做之前,set方法會檢查類實例是否擁有鎖,這對我來說看起來有點奇怪。在什麼有增強共享互斥
這或多或少是一個HPP文件怎麼類的樣子:
#include <boost/thread.hpp>
class A{
private:
//Private methods
void setAttribute(boost::upgrade_lock<boost::shared_mutex>& lock, const bool value);
//Private variables
static boost::shared_mutex mainMutex;
mutable bool attribute;
public:
//... Some public methods using setAttribute
}
,這是一個CPP文件怎麼類的樣子:
void A::setAttribute(boost::upgrade_lock<boost::shared_mutex>& lock, const bool value)
{
(void)lock;
assert(lock.owns_lock());
//get exclusive access to the lock
const boost::upgrade_to_unique_lock<boost::shared_mutex> ulock(lock);
attribute = value;
}
所以,我的問題是,爲什麼我會需要檢查傳遞的鎖是否擁有鎖,因爲setAttribute方法是私有的,並且只能由類內的方法使用。有什麼情況我應該考慮這樣做嗎?
'(無效)鎖定;'那是什麼? –
從我見過的關於如何使用shared_mutex的示例中,他們總是調用lock(),然後升級到一個唯一的鎖以獲得獨佔訪問權。因此,'(void)lock'似乎調用一個重載操作符來調用upgrade_lock的lock()函數?然而,我不能100%確定這一點,因爲我還沒有能夠通過迄今爲止所做的研究證實它 –
「從我見過的例子」 - 鏈接? –