2012-11-16 46 views
7

我發現能夠在null_mutex(當前boost::interprocess::null_mutex)中丟棄非常有用,當我不想在某些情況下實現同步開銷並在其他實例中實現互斥時。在C++ 11中是否有與boost :: interprocess :: null_mutex等價的東西(例如std :: null_mutex)?

我嘗試使用新的C++ 11 mutex類,但我認爲沒有類似null_mutex - 這讓我不解..

是的,我知道這是微不足道的實施(或我可以繼續使用提升,但如果可能的話我想堅持標準,似乎像一個小疏忽)

+1

不,標準中沒有空的互斥鎖。 –

+0

@BoPersson,不要質疑比我更聰明的人,但是有什麼理由(是不是太瑣碎..)? – Nim

+0

我不知道,我沒有看到它提出的標準。這可能是它不在那裏的真正原因 - 沒有人要求。 :-) –

回答

10

你可以讓這個還算平凡,通過創建一個「空」實施Lockable概念:

struct null_mutex 
{ 
    void lock() {} 
    void unlock() noexcept {} 
    bool try_lock() { return true; } 
}; 

這可以與std :: lock_guard配合使用:

null_mutex mux; 
std::lock_guard<null_mutex> guard(mux); 
+0

您還需要'bool try_lock(){return true;}'來滿足可鎖定的需求。所有標準的鎖類和函數(出於某種原因甚至是'lock_guard')都有這樣的要求。 –

+0

@MikeSeymour我專門實現了最小的概念需求:['std :: lock_guard'](http://en.cppreference.com/w/cpp/thread/lock_guard)只需要['BasicLockable'](http:// en.cppreference.com/w/cpp/concept/BasicLockable)。你當然是對的,我會澄清 – sehe

+0

'lock_guard'指定'Lockable' - 見30.4.2.1/2。也許這是一個錯誤,因爲使用'try_lock()'沒有可以想象的理由,但它是標準的。 –

相關問題