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:質問を適切に再定式化。