クアッドコアで4つの作業スレッドと1つのI/Oスレッドを実行している場合、スレッドの1つが別のスレッドとオーバーラップします。sched_yield()して現在のタイムスライスを他のスレッドに譲ることができるように、常に別のスレッドとオーバーラップしているのが入力スレッドであることを確認するにはどうすればよいですか。オーバーラップしているのが2つのワーカースレッドの場合、入力スレッドのyieldは効果がありませんよね?sched_yieldはとにかく別のコアから別のスレッドをもたらしますか?
#include <sched.h>
#include <pthread.h>
void test(void*) {
while(1) {}
}
int main (void) {
pthread_t t;
for(int i = 0;i < 4;i++)
pthread_create(&t,0,(void*(*)(void*))test,0); //workers
while (1) {
sched_yield(); //input thread
}
return 0;
}
編集 入力スレッドは、着信メッセージをポーリングする必要があります。私が使用しているライブラリ(MPI)は割り込み駆動型ではなく、条件変数はこのコンテキストでは役に立ちません。入力スレッドでやりたいことは、条件を一度チェックして、そのタイムスライスをあきらめることです。すべてのスレッドを実行するのに十分なコアがある場合、入力スレッドはそれ自体のコアで実行されます。そうでない場合は、最小数のチェック、つまりタイムスライスごとに1回実行されます。私は十分に明確であることを願っています。