pthread_tがあり、CPUアフィニティを変更したいと思います。問題は、 pthread_setaffinity_np()がないglibc2.3.2を使用していることです。ただし、pthread_setaffinity_np()自体がsched_setaffinity()のラッパーであるため、これは問題ありません。これは、プロセスIDの代わりにスレッドIDを渡して、任意のスレッドのアフィニティを設定することで呼び出すことができます。
しかし... sched_setaffinityが使用できるスレッドIDはOSスレッドIDであり、 gettid()システムコールから取得できる種類です。これは不透明(OPAQUE)型のpthread_tとは異なり、gettid()は現在のスレッドのthread-idのみを返します。任意のスレッドのCPUアフィニティを設定できる必要があります。
残念ながら、pthreadのプライベート部分にアクセスできません。そのため、pthread_tをにキャストしてスレッドIDを盗むことができますstruct pthread *
。プライベートな実装に依存することはさらに多くの問題を求めているので、さらに良いと思います。
私もpthread_getunique_np関数を読んでいますが、これは「一意の整数識別子」を返します。これは、OSスレッドIDと同等の形や形式ではないと思います。
したがって、質問:任意のpthread_tからスレッドIDを取得するにはどうすればよいですか?