私はコード変数アクセス
int i; //gobal var
Thread1:
{
...
i=some value;
}
Thread2:
{
if (i==2) dosomething();
else dosomethingelse();
i = 4;
}
を以下している私は、同期オブジェクトを使用しなくてもとC++の標準的な方法で、スレッドセーフであることを書きたいと思います。
私の質問は、同期を使用して別のスレッドでアクセスを読み書きする変数を持つ方法です。私の要件はtrueまたはfalseを持つことができるブール変数を持っています。
volatile変数はアトミックです。
iはアトミック変数を持っていTBBのような任意のlibrairesを使用することになっておりませんのでご注意ください。私たちは、この変数が非常に頻繁ではない変更として、我々はスレッドで変数にアクセスするたびに取るとsemphoreリリースしたくない、この質問をするための
理由。
Boost AtomicsおよびC++ 0xスレッド仕様を参照してください。 '同期オブジェクトを使用せずにスレッドセーフであることを書いておきたい、何か他のものはあなたのものです。:) - さまざまな定義を安全にすることができます。ファジーが十分で、コードが時折「ファントム」値を読み取ることができる場合は、単一のライターがいる限りロッキングする必要はありません。 (これは、リアルタイムの監視メカニズムに役立つかもしれません)。また、変数が頻繁に変更されない場合、それは条件変数の良い候補のようです。 – sehe
上記のシナリオで条件変数を使用する簡単な例を示してください。私の理解は、前進するのではなく、条件変数のブロックですが、ループしたいです – venkysmarty
変数を読み取っているスレッドの数はどれくらいあり、スレッドを変更する可能性がありますか? – NPE