我希望有两个线程。第一个线程1偶尔会调用下面的伪功能:如何多线程呢?
void waitForThread2() {
if (thread2 is not idle) {
return;
}
notifyThread2IamReady(); // i.e. via 1st condition variable
Wait for thread2 to finish exclusive access. // i.e. via 2nd condition variable.
}
第二个线程2是永远在下面的伪循环:
for (;;) {
Notify thread1 I am idle.
Wait for thread1 to be ready. // i.e. via 1st condition variable.
Notify thread1 I am exclusive.
Do some work while thread1 is blocked.
Notify thread1 I am busy. // i.e. via 2nd condition variable.
Do some work in parallel with thread1.
}
什么是写这使得两个线程1和线程是最好的方式在有多个内核的机器上尽可能地保持忙碌。我想避免在一个线程中的通知和另一个线程的检测之间的长时间延迟。我试过使用pthread条件变量,但发现thread2正在执行'notify thread1 I busy'和while()onS2IsExclusive()中的waitForThread2()循环之间的延迟可能高达几乎一秒的延迟。然后我尝试使用一个易变的sig_atomic_t共享变量来控制它,但是出了问题,所以我不能正确地做到这一点。
你会过得更好告诉人们,你实际上是试图解决,而不是要求他们执行你已经设想了一个解决问题的... – 2010-05-25 02:13:47
伪代码并没有太大的意义。你如何通知另一个线程你忙?为什么?此外,你在这里关注线程;通常,您需要同步数据。你同步哪些数据,以及你的并行操作如何? – WhirlWind 2010-05-25 02:16:45
如果你的condvars正在采取任何行动,你正在做的事情非常错误。此外,要做的规范是锁定数据结构,而不是“通知其他线程”;后者不会缩放。 – 2010-05-25 02:28:53