2010-12-04 17 views
5

の機能がstd::queueのスレッドセーフではないのはなぜですか? (hereを参照してください)constは、読み取り専用なので、常にスレッドセーフでなければならないのですか?std :: queue :: empty()がスレッドセーフではないのはなぜですか?関数をスレッドセーフにするべきではありませんか?

多分、いくつかのスレッドによって書き込まれる可能性のあるクラス内に何らかのmutable変数があるかもしれませんか?

+1

読み取り専用機能は、本質的にスレッドセーフではありません。他のスレッドで書き込みが行われていなければ安全です*。 – jalf

答えて

5

クラスのデータを変更しないメソッドは、オブジェクトがでない場合、のいずれかのメソッドによって変更された場合にのみスレッドセーフです。そうしないと、別のスレッドのメソッドがオブジェクトを(ロックの下で、正しく)変更することができ、ロックを取得せずにスレッドのqueue::empty()を呼び出すと競合状態に陥る可能性があります。

関連する問題