2017-12-15 11 views
0

スレッドごとに関数/メソッドを1回だけ呼び出す方法を教えてください。 私は定期的に呼び出される関数を持っていて、Initメソッドを同じスレッドで一度だけ呼び出さなければなりません。しかし、この関数が別のスレッドによって呼び出された場合、この新しいスレッドのInitを実行する必要がありますが、もう一度、一度だけ実行しなければなりません。 これを実行する仕組みがありますか?
私は、クライアント/サーバの実装を持っている:私はInitFunctionのウィッヒがどのように見えるしている別のクラスではスレッドごとに関数を一度呼び出す方法

void ClassB::hello() { 
InitFunction(); 
/* something to do */ 
} 

void ClassA::InitFunction() { 
initData(); 
/* other stuff */ 
} 

initData(私の方法(ハロー)は、定期的にクライアントによって呼び出されます)スレッドで一度だけ呼び出さなければならない。私はこの関数が一度だけ(またはInitFunction()一度だけ)呼び出されていることを確認したい。私はC++ 11を使用しています。私はstd :: call_onceをチェックしたが、私の問題を解決するとは思わない。

ありがとうございます。

+0

スレッドローカルストレージを使用することができます –

+0

'std :: call_once'と' thread_local'を確認してください – Ivan

+0

あなたのクラスの独自のインスタンスを各スレッドに構築させることができますか?そうであれば、initDataをコンストラクタに配置するか、最初の使用時にブール値を更新するだけです。 – phatfingers

答えて

0

シングルトンがTLS(スレッドローカルストレージ)に格納されている場合は、シングルトンパターンを使用します。

あなたの質問はかなり幅広いので、実際はかなり広い答えです。 TLSは通常、使用しているランタイムによって提供されるので、より良い答えを得るために、これまでに達成したことを示し、ランタイム/オペレーティングシステムとコンパイラについて詳しく教えてください。

関連する問題