スレッドごとに関数/メソッドを1回だけ呼び出す方法を教えてください。 私は定期的に呼び出される関数を持っていて、Initメソッドを同じスレッドで一度だけ呼び出さなければなりません。しかし、この関数が別のスレッドによって呼び出された場合、この新しいスレッドのInitを実行する必要がありますが、もう一度、一度だけ実行しなければなりません。 これを実行する仕組みがありますか?
私は、クライアント/サーバの実装を持っている:私はInitFunctionのウィッヒがどのように見えるしている別のクラスではスレッドごとに関数を一度呼び出す方法
void ClassB::hello() {
InitFunction();
/* something to do */
}
:
void ClassA::InitFunction() {
initData();
/* other stuff */
}
initData(私の方法(ハロー)は、定期的にクライアントによって呼び出されます)スレッドで一度だけ呼び出さなければならない。私はこの関数が一度だけ(またはInitFunction()一度だけ)呼び出されていることを確認したい。私はC++ 11を使用しています。私はstd :: call_onceをチェックしたが、私の問題を解決するとは思わない。
ありがとうございます。
スレッドローカルストレージを使用することができます –
'std :: call_once'と' thread_local'を確認してください – Ivan
あなたのクラスの独自のインスタンスを各スレッドに構築させることができますか?そうであれば、initDataをコンストラクタに配置するか、最初の使用時にブール値を更新するだけです。 – phatfingers