Блокировка с двойной проверкой * кроме * синглетонов

Некоторое время я искал межсетевое взаимодействие, чтобы найти обсуждение 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 сделать это без блокировки. Работа, которую выполняют порожденные потоки, — это все или ничего, это то, чего они ждут.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]