2

volatile使い方について質問です。私は通常、スレッド間で共有されるすべての変数に、volatileメモリへの直接アクセスを保証するためのキーワードを設定し、もちろんミューテックスで保護するようにしています。

ただし、volatile一貫性を確保するために変数を共有する場合、本当に必要ですか?

例を挙げて説明します:

Thread1: //(affects it behaviour with the variable)
mymutex.lock();
if(variable)
{
   ...
   variable = false;
}
mymutex.unlock();

Thread2:
mymutex.lock();
variable = true;
mymutex.unlock();

上の例でthread2は書き込みのみ、thread1読み書きのみ。variableがキャッシュされ、スレッドが新しい値を読み取らない可能性はありますか? ミューテックスが適切に設定されていても?volatileこの場合必要ですか?

std::vector変数の代わりに、揮発性にできない があるため、これを求めています。volatileそして、このアプローチがキーワードなしで安全であると 100% 確信しているわけではありません。

ありがとう。

EDITED:質問を適切に再定式化。

4

2 に答える 2

0

ここで私の答えを見てください。

下のように、賢くならないでください volatile を使用してスレッドの安全性を保証しようとします。

于 2013-10-30T14:51:41.370 に答える