2

マルチスレッド環境では変数(int temp;など)があります。一部のスレッドは、書き込みロックが保護された状態で書き込みます。他の人は変数を読み取りますが、ロックはありません。

私の質問は次のとおりです。変数がSETの要素の1つ(たとえば、{1、2、3})になるように書き込まれた場合、一部のスレッドによって繰り返し発生します。私がそれを読んだとき、それは常にそのSETの1つですか。

4

3 に答える 3

4

ルールは非常に単純です。2 つ以上のスレッドが同じ変数にアクセスし、それらのスレッドの少なくとも 1 つがそれに書き込みを行う場合、それらのすべてのアクセスを同期する必要があります。そうしない場合、動作は未定義です。

volatileここでは役に立ちません。ミューテックスまたは条件変数を使用するか、変数自体をアトミックにします。(そして、「アトミック」は C++11 アトミックを意味し、マルチスレッド アプリケーションでかなりうまく機能すると誰かが考えるプロパティの選択ではありません)。

于 2013-03-27T11:22:06.863 に答える
0

誰もあなたのSETの外から値を書き込んでいない場合、値はこのSETから残ります。volatileあなたのケースで使用する必要があるかもしれません。

于 2013-03-27T10:46:33.007 に答える
0

はい、SETは重複を許可しないため、変数の型が不変の場合はそうなります

SET参照

于 2013-03-27T09:26:27.153 に答える