std::call_once — cppreference.com
Материал из cppreference.com
<metanoindex/>
<tbody> </tbody>
| Определено в заголовочном файле |
||
|
|
(начиная с C++11) | |
Выполняет функции f только один раз, даже если вызывать из нескольких потоков.
Оригинал:
Executes the function f exactly once, even if called from several threads.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Каждая группа call_once вызова, который получает тот же объект std::once_flag будет отвечать следующим требованиям:
Оригинал:
Each group of call_once invocations that receives the same std::once_flag object will meet the following requirements:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Ровно исполнения ровно одна из функций (передается как
fна вызовы в группе) не выполняется. Не определено, какие функции будут отобраны для исполнения. Выбранная функция выполняется в том же потоке, что иcall_onceвызов был передан.Оригинал:
Exactly one execution of exactly one of the functions (passed as
fto the invocations in the group) is performed. It is undefined which function will be selected for execution. The selected function runs in the same thread as thecall_onceinvocation it was passed to.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Нет вызова в группу возвращается до вышеуказанного исполнения Выбранная функция завершилась успешно, то есть не выходить через исключение.
Оригинал:
No invocation in the group returns before the abovementioned execution of the selected function is completed successfully, that is, doesn't exit via an exception.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если выбранная функция выходит через исключение, оно распространяется на абонентов. Еще одна функция, затем выбирается и выполняется.
Оригинал:
If the selected function exits via exception, it is propagated to the caller. Another function is then selected and executed.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Параметры
| flag | — | Объект, для которого ровно одна функция запускается на выполнение Оригинал: an object, for which exactly one function gets executed Текст был переведён автоматически используя Переводчик Google. |
| f | — | функции для вызова Оригинал: function to call Текст был переведён автоматически используя Переводчик Google. |
| args... | — | Аргументы для передачи в функцию Оригинал: arguments to pass to the function Текст был переведён автоматически используя Переводчик Google. |
Возвращаемое значение
(Нет)
Исключения
std::system_error если условие не позволяет звонки на
call_onceот исполнения, как указаноОригинал:
std::system_error if any condition prevents calls to
call_oncefrom executing as specifiedТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.любое исключение по
fОригинал:
any exception thrown by
fТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Пример
#include <iostream> #include <thread> #include <mutex> std::once_flag flag; void do_once() { std::call_once(flag, [](){ std::cout << "Called once" << std::endl; }); } int main() { std::thread t1(do_once); std::thread t2(do_once); std::thread t3(do_once); std::thread t4(do_once); t1.join(); t2.join(); t3.join(); t4.join(); }
Вывод: