次の例では:
ワーカー スレッドはベクトルに何かを追加します。
std::lock_guard<std::mutex> guard(UI::GetInstance().my_mutex);
UI::GetInstance().my_vector.push_back(new_value);
UI スレッドはリストをチェックします。
while (true) {
std::lock_guard<std::mutex> guard(my_mutex);
//perform my_vector operations and clear at the end
my_vector.clear();
}
反復ごとにロックを保護するのは好きではありません。これに対するより良いアプローチはありますか? 私はそのようなフラグを設定したいと思っていましたが、ブール値がスレッドセーフかどうかはわかりません:
ワーカー スレッドはベクトルに何かを追加します。
std::lock_guard<std::mutex> guard(UI::GetInstance().my_mutex);
UI::GetInstance().my_vector.push_back(new_value);
UI::GetInstance().my_vector_changed=true; // set a flag
UI スレッドはリストをチェックします。
while (true) {
if (my_vector_changed) { // only lock on changes
std::lock_guard<std::mutex> guard(my_mutex);
//perform my_vector operations and clear at the end
UI::GetInstance().my_vector.clear();
my_vector_changed=false;
}
}
ガードをロックするためのより良いアプローチはありますか?