Пространства имён
Варианты
Действия

std::call_once

Материал из cppreference.com
< cpp‎ | thread

 
 
Библиотека поддержки потоков
Потоки
Оригинал:
Threads
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
thread(C++11)
this_thread имен
Оригинал:
this_thread namespace
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
get_id(C++11)
yield(C++11)
sleep_for(C++11)
sleep_until(C++11)
Взаимное исключение
Оригинал:
Mutual exclusion
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
mutex(C++11)
timed_mutex(C++11)
Generic управления замком
Оригинал:
Generic lock management
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
lock_guard(C++11)
unique_lock(C++11)
defer_lock_t
try_to_lock_t
adopt_lock_t
(C++11)
(C++11)
(C++11)
lock(C++11)
try_lock(C++11)
defer_lock
try_to_lock
adopt_lock
(C++11)
(C++11)
(C++11)
Условия переменных
Оригинал:
Condition variables
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
condition_variable(C++11)
condition_variable_any(C++11)
notify_all_at_thread_exit(C++11)
cv_status(C++11)
Futures
Оригинал:
Futures
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
promise(C++11)
future(C++11)
shared_future(C++11)
packaged_task(C++11)
async(C++11)
launch(C++11)
future_status(C++11)
future_error(C++11)
future_category(C++11)
future_errc(C++11)
 
Определено в заголовочном файле <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 Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
Каждая группа 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 Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Ровно исполнения ровно одна из функций (передается как f на вызовы в группе) не выполняется. Не определено, какие функции будут отобраны для исполнения. Выбранная функция выполняется в том же потоке, что и call_once вызов был передан.
    Оригинал:
    Exactly one execution of exactly one of the functions (passed as f to 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 the call_once invocation it was passed to.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Нет вызова в группу возвращается до вышеуказанного исполнения Выбранная функция завершилась успешно, то есть не выходить через исключение.
    Оригинал:
    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 Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • Если выбранная функция выходит через исключение, оно распространяется на абонентов. Еще одна функция, затем выбирается и выполняется.
    Оригинал:
    If the selected function exits via exception, it is propagated to the caller. Another function is then selected and executed.
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Содержание

[править] Параметры

flag -
Объект, для которого ровно одна функция запускается на выполнение
Оригинал:
an object, for which exactly one function gets executed
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
f -
функции для вызова
Оригинал:
function to call
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
args... -
Аргументы для передачи в функцию
Оригинал:
arguments to pass to the function
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Возвращаемое значение

(Нет)
Оригинал:
(none)
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Исключения

  • std::system_error если условие не позволяет звонки на call_once от исполнения, как указано
    Оригинал:
    std::system_error if any condition prevents calls to call_once from executing as specified
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.
  • любое исключение по f
    Оригинал:
    any exception thrown by f
    Текст был переведён автоматически через Google Translate.
    Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Пример

#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 вызывает функцию только один раз
Оригинал:
helper object to ensure that call_once invokes the function only once
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

(класс) [edit]