0

通常、対応するミューテックスによって保護されている、パブリックにアクセス可能なメンバー変数を介してスレッドにコマンドを送信します。

私の質問は次のとおりです。書き込みアクセス中に単一の変数がミューテックスによって保護されている場合、読み取りアクセス中にも保護する必要がありますか、それとも単に読み取ることができますか?

例:
スレッドは、何か特別なことを行う必要があるかどうかをチェックします
( doSpecialは別のスレッドに記述されています)。

// some code
if (doSpecial) {
  // code
}
// some code

この読み取りアクセスはミューテックスで保護する必要がありますか?

4

2 に答える 2

2

はい、変数が 1 つのスレッドで変更され、他のスレッドでアクセスされる場合、すべてのアクセスはミューテックスによって保護される必要があります。それまたは他の同期方法がなければ、変更がアトミックであるという保証はありません (そのため、他のスレッドが破損した値を読み取る可能性があります)。他の人に伝播します)。

C++11 では、単純な型の場合std::atomic、ミューテックスによって保護された非アトミック変数ではなく、考慮することがあります。

于 2013-05-27T13:00:26.087 に答える