Некоторое время я искал межсетевое взаимодействие, чтобы найти обсуждение DCL, которое не включает шаблон синглтона. Так что вместо этого я просто собираюсь спросить, что именно я хочу знать.
Подходит ли здесь DCL?
std::shared_ptr<bool> mybool_smart_ptr(new bool); // initialized to false in main thread
std::shared_ptr<std::mutex> mtx(new std::mutex);
std::shared_ptr<std::condition_variable_any> cond(new std::condition_variable_any);void proceed_to_work() {
if(*mybool_smart_ptr)
return;
std::unique_lock<std::mutex> lock(*mtx);
// if DCL is broken, would a fence here help?
if(*mybool_smart_ptr)
return;
cond->wait(lock);
}
Любые писатели *mybool_smart_ptr
сделать это без блокировки. Работа, которую выполняют порожденные потоки, — это все или ничего, это то, чего они ждут.
Задача ещё не решена.