以下のコードのように、実際には何も行わず、ただミューテックスの要件を満たすだけの実装は簡単に作れるでしょう。Null Objectパターンの一種と言えますよね。
class null_mutex { void lock() {} void try_lock() {} void unlock() {} }; |
Boostには、そんなクラスがなんだかあちこちにあるようです。
- Boost.Signals2: Class dummy_mutex (boost::signals2::dummy_mutex)
- Boost.Interprocess: Class null_mutex (boost::interprocess::null_mutex)
- Boost.Thread: Class null_mutex — EXTENSION
- Boost.Pool: Class template singleton_pool – 1.63.0 (boost::details::pool::null_mutex)
- Boost.Log: boost/log/detail/fake_mutex.hpp (boost::log::aux::fake_mutex)
- Boost.Fiber:
- BOOST_FIBERS_NO_ATOMICSを定義した場合のboost::fibers::detail::spinlockとboost::fibers::detail::spinlock_lock boost/fiber/detail/spinlock.hpp, Tweaking
- 1.62.0には、boost::fibers::detail::non_spinlockとboost::fibers::detail::non_lockがあった: boost/fiber/detail/spinlock.hpp – 1.62.0
Boost.Threadのものが最も汎用的です。BoostのUpgradeLockableコンセプトまで実装しています。それに次ぐのがBoost.Interprocessのものです。残りはLockableコンセプト(lock
, try_lock
, unlock
)のみ実装のようです。
私自身は、boost::signals2::dummy_mutexなら使ったことがあります。シングルスレッドでboost::signals2::signalを使うという状況でした。
スポンサード リンク |
この記事のカテゴリ
- C++ ⇒ Boostのなんにもしないミューテ(ッ)クス