Skip to content

Latest commit

 

History

History
87 lines (62 loc) · 2.28 KB

call_once.md

File metadata and controls

87 lines (62 loc) · 2.28 KB

#call_once

namespace std {
  template <class Callable, class ...Args>
  void call_once(once_flag& flag, Callable func, Args&&... args);
}
  • once_flag[link /reference/mutex/once_flag.md]

##概要 指定された関数を一度だけ呼び出す。 この関数は主に、スレッド間で共通使用するデータの初期化に使用する。

##効果 パラメータflagが初期状態であれば、func関数オブジェクトにargs...を適用して呼び出し、そうでなければfunc関数オブジェクトを呼び出さない。 func関数オブジェクトの呼び出しが例外を送出する場合、その例外はcall_once()関数の呼び出し元に伝達され、パラメータflagは初期状態のままとなる。

##戻り値 なし

##例外 この関数は、func関数オブジェクトの呼び出しによって送出される、あらゆる例外が送出される可能性がある。 そのほかに、以下のerror conditionを持つsystem_error例外オブジェクトを送出する可能性がある:

##備考 func関数オブジェクトの呼び出しが例外を送出した場合、同じパラメータflagを指定した次のcall_onceにて関数オブジェクトが呼び出される。また、同じパラメータflagを指定した複数call_once()において、指定された各関数オブジェクトの呼び出しは同時に行われない。(全順序が保証される)

##例

#include <iostream>
#include <thread>
#include <mutex>

std::once_flag once;

void init()
{
  // 初期化を行う...
  std::cout << "initialize" << std::endl;
}

void thread_proc()
{
  std::call_once(once, init);
}

int main()
{
  std::thread t1(thread_proc);
  std::thread t2(thread_proc);
  std::thread t3(thread_proc);

  t1.join();
  t2.join();
  t3.join();
}
  • call_once[color ff0000]

###出力

initialize

##バージョン ###言語

  • C++11

###処理系

##参照