std::call_once
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
<metanoindex/>
<tbody> </tbody>| Определено в заголовочном файле <mutex>
|
||
template< class Function, class... Args > void call_once( std::once_flag& flag, Function&& f, Args&& args... ); |
(начиная с 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 asfto 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 tocall_oncefrom executing as specifiedТекст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. - любое исключение по
fОригинал:any exception thrown byfТекст был переведён автоматически используя Переводчик 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();
}
Вывод:
Called once
См. также
(C++11) |
вспомогательный объект, гарантирующий, что call_once вызывает функцию только один раз (класс) |