2
ボイラプレートマルチスレッドコードがあるとします。以下のように。私は、もしあれば、そのコードを使っている複数のスレッドが常に最新の状態を見ることができるかどうかを疑問に思っていました。私はC++がメモリモデルについてほとんど保証していないことを知っています。そして、私はどこかで、状態の揮発性を宣言するだけでも助けにならないかもしれないと読んでいると思います。しかし実際には人々は喜んでboost :: threadを使いますが、そのドキュメントには、外部の状態だけを使用しない限り、ミューテックスは有用ではないという大きな警告はありません:-)私は、私は何かをするたびに__sync_synchronize()を呼び出すべきですか?boost :: threadとメモリモデル
class Blah {
typedef (some horribly complex data structure) State;
State state;
boost::mutex m;
(...)
void use()
{
boost::lock_guard<boost::mutex> dummy (m);
(do something to state, being especially careful to maintain invariants)
}
};
これはpthreadのために文書化されており、それは私のために十分です:http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11 – Joe