ACE スレッドを使用しており、各スレッドに独自の int メンバーが必要です。それは可能ですか?
5 に答える
ACE はこれを「スレッド固有ストレージ」と呼んでいます。これをチェックしてください:ACE_TSS。私が知っているのはこれくらいです。申し訳ありませんが、これ以上の助けにはなりません。
スレッド ローカル ストレージのウィキペディア ページには、これを行う pthreads の方法もあると書かれています。
ACE_TSS にすべてのスレッドの初期値を設定させる方法はありません。ただし、スレッド関数に入力した直後に初期値を簡単に設定できます。
そのプラットフォーム固有。たとえば、Windows を使用する必要があります__declspec( thread )
。コンパイラはTLS API (TlsAlloc、TlsFree など) を活用し、Win32 では常に TLS の代わりに FLS (Fiber Local Storage) を使用する必要がありますが、最新の Win32 バージョンではいずれにしても TLS API がサイレントに FLS にリダイレクトします。
はい。ACS_TSS<type>
「スレッド固有のストレージ」(つまり、スレッドローカル変数)用に設計されたテンプレートを使用できます。
詳細については、ACE_TSS のドキュメントを参照してください。
GCC は、一部のターゲットに対して TLS を直接サポートしています。スレッドローカル変数を定義するために GCC 固有の__thread
キーワードを使用できます (静的またはグローバルである必要があります)。
libACE 自体にはスレッド ローカルな機能が組み込まれています。ドキュメントを参照してサンプル コードを確認してください。