看起来linux没有实现pthread_suspend并继续,但我真的需要它们。
我试过cond_wait,但它太慢了。被线程化的工作大部分在50us内执行,但偶尔也会执行500ms以上。cond_wait的问题有两个方面。互斥锁所用的时间与微秒执行相当,我不需要锁。其次,我有许多工作线程,当它们需要被唤醒时,我并不真的想创建N个条件变量。
我确切地知道哪个线程正在等待哪个工作,并且可以直接pthread_continue该线程。线程知道什么时候没有更多的工作,并且可以很容易地pthread_suspend自己。这将不使用锁定,避免蜂拥而至,并且速度更快。Problem is....no pthread_suspend or _continue。
有什么想法吗?
发布于 2010-06-08 09:33:36
让线程等待特定的信号。
使用pthread_sigmask和sigwait。
发布于 2010-06-08 10:50:21
让线程在管道读取时阻塞。然后通过管道分派数据。线程将在它们需要处理的数据到达时被唤醒。如果数据非常大,只需通过管道发送一个指针。
如果特定的数据需要转到特定的线程,那么每个线程需要一个管道。如果任何线程可以处理任何数据,那么所有线程都可以在同一管道上阻塞,并且它们将唤醒循环。
发布于 2010-06-08 10:49:32
在我看来,这样的解决方案(即使用"pthread_suspend“和"pthread_continue")是不可避免的。
从工作线程完成工作到决定挂起自己,再到实际发生挂起之间,可能会经过任意一段时间。如果主线程在这段时间内决定该工作线程应该再次工作,则“继续”将不起作用,并且工作线程将不管怎样挂起自己。
(请注意,这不适用于允许"continue“排队的挂起方法,如其他答案中提到的sigwait()和read()方法)。
https://stackoverflow.com/questions/2994216
复制相似问题