1

Solaris では、processor_bindスレッドのアフィニティを設定するために使用されます。ターゲットスレッドの LWPID を知るか、定数P_MYIDを使用して自分自身を参照する必要があります。

次のような関数があります。

void set_affinity(pthread_t thr, int cpu_number)
{
   id_t lwpid = what_do_I_call_here(thr);
   processor_bind(P_LWPID, lwpid, cpu_number, NULL);
}

実際には、私の関数には、明確にするために省略したクロスプラットフォームのものがたくさんあります。

重要な点は、任意の pthread_t のアフィニティーを設定したいので、P_MYID.

processor_bindまたは代替インターフェースを使用してこれを達成するにはどうすればよいですか?

4

2 に答える 2

0

Solaris 11 カーネルには、重要なスレッドの最適化があります。特別な注意が必要なスレッドを設定すると、残りはカーネルが行います。これはあなたが望むもののようです。この短い説明を読んで、あなたが何を望んでいるのか理解できたかどうかを確認してください。

https://blogs.oracle.com/observatory/entry/critical_threads_optimization

上記は代替品です。まったく飛ばないかもしれません。しかし、オラクルによると、好ましいメカニズムです。

Solaris 10 の場合pthread_t tid、LWP の をへの呼び出しidtype_tで ofとともに使用します。これは、Solaris 8 -> 11 で機能します。処理中の LWP に対してのみ機能します。それがあなたのモデルかどうかは私にはわかりません。P_LWPIDprocessor_bind

HTH

于 2012-12-31T01:42:54.320 に答える