如果我在四核上运行 4 个工作线程和 1 个 I/O 线程,则其中一个线程将与另一个线程重叠。我如何确保输入线程总是与另一个线程重叠,以便我可以 sched_yield() 将其当前时间片放弃给另一个线程。如果是重叠的两个工作线程,输入线程上的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)不是中断驱动的,在这种情况下条件变量是无用的。我想在输入线程中做的是检查一次条件,然后放弃它的时间片。如果有足够的核心来运行所有线程,则输入线程将在自己的核心上运行。如果不是,它将运行最少数量的检查,即每个时间片一次。我希望我足够清楚。