5

制御していないスレッドからスレッドIDにアクセスする必要があります(非同期コールバック関数内にあり、一連の異なるスレッドから呼び出されます)。

スレッドIDへのアクセスがパフォーマンスの点で高価かどうか知りたいですか?

boost::this_thread::get_id()どちらかまたはGetCurrentThreadId()Windowsから使用することを計画しています。

明確にするために、データがコールバックから到着したときにローカルキャッシュ配列を準備する必要があります。エラーとロックを回避して各スレッドにローカルキャッシュを使用し、スレッドIDを使用して適切なキャッシュにアクセスすることを計画しています。 。また、来るデータは常にサイズが異なるため、スタックに入れることができず、ヒープデータの作成と削除を常に避けたいと考えています。

4

3 に答える 3

7

Windowsは、すべてのスレッド固有の情報をいわゆるTEBに格納します。x86では、fsレジスタはこの構造体の先頭を指し、x64ではgsレジスタです。

x86ウィンドウでは、スレッドIDはに格納されFS:[0x24]ます。これはおそらくアクセスするのにかなり安価なはずです。スレッドローカルストレージに情報を格納するには、1つの余分な間接参照(TEBからTLSのアドレスを取得します)が必要になるため、基本的には手動のプライベートキャッシュと同じですが、作業が少なくて済みます。

于 2012-10-16T07:28:25.670 に答える
2

スレッドローカルストレージを使用しないのはなぜですか? http://www.boost.org/doc/libs/1_35_0/doc/html/thread/thread_local_storage.html

于 2012-10-16T07:12:48.077 に答える
2

MSDN(DevDiv#1039430)によると、VS2015より前

this_thread :: get_id()が不必要に遅かった

彼らが言わないのはどれだけ遅いか。

于 2016-07-05T16:40:39.187 に答える