std::call_once, даже если его дергают параллельно с общим std::once_flag. Два потока попробуют напечатать слово.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpThOc 559 of 696 menu
◀ ▶

Однократный вызов std::call_once в C++

Ровно один запуск гарантирует std::call_once, даже если его дергают параллельно с общим std::once_flag.

Два потока попробуют напечатать слово, но сработает только первый успешный проход:

#include <iostream> #include <mutex> #include <thread> int main() { std::once_flag flag; auto print_once = []() { std::cout << "once\n"; }; std::thread a([&]() { std::call_once(flag, print_once); }); std::thread b([&]() { std::call_once(flag, print_once); }); a.join(); b.join(); return 0; }

Два потока вызывают std::call_once с общим std::once_flag. Внутри выведите "init" один раз.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить