以下は、50msごとに呼び出されるコールバック時に2つの変数が更新される私のコードです。 50ミリ秒ごとに目を覚まし、変数を読み込むリーダースレッドもあります。同時読み込み書き込み
thisを実行した後、コールバックが受信されたときに読み込みスレッドが起動し、読み書き中に同じmutexをロックしていないためにスレッドが起動する場合があると推測しました。一貫性のないメモリが読み取られます。
ただし、実行すると、このシナリオは発生しません。私はそれを十分長く走らせていないのですか、私の理解に間違いがありますか?二つ以上のスレッドの少なくとも一方は、1つ以上のスレッドが不整合な状態が発生する可能性が書き込み動作である共有データにアクセスしているとき
recursive_mutex mutex1
recursive_mutex mutex2
var1, var2
//called every 50ms
onUpdateListener() {
lock(mutex1)
update var1
update var2
}
VarReaderThread::readVar() {
sleep(50)
while(true) {
{
lock(mutex2)
read var1
read var2
sleep(50)
}
}
}
あなたのmutexの 'スコープ'は明確ではありません。 –
これらのミューテックスを使用する理由は何ですか? varsにアクセスする他のコードはありますか?このシナリオでは、彼らはまったく役に立たないからです。 –
同時に書いたり読んだりしないでください。矛盾した状態(競合状態)に遭遇することがあります。読書と読書を同時に行うことはできますが、同時に書くことと書いてはいけません。書き込みは混在しません。読み取りと書き込みに別々のロックを使用することは役に立ちません。 @HenkHoltermanはそのコードでこれらのmutexが何もしていないことを示唆しています。 – Persixty