2012-11-16 15 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コンセプトの「NULL」の実装を作成することによって、かなり自明これを行うことができます。

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()'を使う理由はないのでエラーですが、それは標準です。 –

関連する問題