タグ

2012とBoost.Threadに関するUSAGI-WRPのブックマーク (2)

  • condition_variable_any+recursive_mutexの注意点 - yohhoyの日記

    C++11標準ライブラリやBoost.Threadライブラリで提供されるcondition_variable_anyとrecursive_mutexの組み合わせについてメモ。 まとめ:condition_variable_anyとrecursive_mutexの組み合わせ利用は避けること。*1 *2 条件変数condition_variable_anyのwaitメンバ関数仕様では、指定されたロックオブジェクトに対して1度だけunlock操作を行う。同関数に対して2回以上lock操作されている(ロックカウント > 1)再帰ロックオブジェクトを指定した場合、該当ロックは解放されない(ロックカウント != 0)まま関数を呼び出したスレッドAはブロック状態に遷移する。この状況では別スレッドBでのロック獲得要求もブロックされるため、プログラム全体としてはデッドロックに陥る。 condition_va

    condition_variable_any+recursive_mutexの注意点 - yohhoyの日記
  • C++11とBoost.ThreadのMutex/Lock比較表 - yohhoyの日記

    C++11標準ライブラリで新たに追加された排他制御ライブラリ/標準ヘッダ<mutex>と、Boost.Threadライブラリ 1.49.0の比較一覧表。 C++11とBoost.Threadライブラリでは、いくつかのLockable要件(requirements)*1を定義し、各種Mutex型およびLockオブジェクトを提供する。 Lockable要件 排他制御(mutual exclusion)として機能する型に対する要件。特定の型を指すわけではない。例えば「ロック獲得操作を行うlockメンバ関数とロック解放操作を行うunlockメンバ関数を有する」など。 Mutex型 Lockable要件を満たす、実際に排他制御として機能する型。どのLockable要件を満たすかに応じて異なる型が提供される。 Lockオブジェクト RAIIイディオムによって確実にロック解放操作を行うためのオブジェクト

    C++11とBoost.ThreadのMutex/Lock比較表 - yohhoyの日記
  • 1