これは C++ 標準に関する質問です。私はドラフト標準にしかアクセスできないため、これが公式のものと異なる場合はお詫びします. また、これがどのように機能するかを誤解している場合は、お気軽に修正してください。
1 つは文字列への書き込み、もう 1 つはその文字列の内容のコピーを作成する 2 つのスレッドがあるとします。一般に、ロックには RAII クラスを使用する必要があるstd::mutex myMutex;
ことはわかっています。例をより明確にするために、lock と unlock を明示的に使用しました。
// Global variable
std::string message;
std::mutex myMutex;
// Thread one
myMutex.lock();
message = "Hello";
myMutex.unlock();
// Thread two
myMutex.lock();
std::string copy = message;
myMutex.unlock();
私の理解では、これがスレッド間で確実に機能するためには、スレッド 1が文字列を設定した後にリリース操作を実行し、スレッド 2が文字列を読み取る前に取得を実行する必要があります。
C++11 のドラフト標準を読んでも、これを行うと述べているものは何も見えませんがstd::mutex
、それが期待されていること、またはミューテックスが何の役にも立たないことは明らかです。
誰かが私に関連セクションを見てもらうことができますか? 標準の文言は、カジュアルな読者にはしばしば明確ではありません:)