首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux pthread_suspend

linux pthread_suspend
EN

Stack Overflow用户
提问于 2010-06-08 09:18:31
回答 5查看 6.6K关注 0票数 11

看起来linux没有实现pthread_suspend并继续,但我真的需要它们。

我试过cond_wait,但它太慢了。被线程化的工作大部分在50us内执行,但偶尔也会执行500ms以上。cond_wait的问题有两个方面。互斥锁所用的时间与微秒执行相当,我不需要锁。其次,我有许多工作线程,当它们需要被唤醒时,我并不真的想创建N个条件变量。

我确切地知道哪个线程正在等待哪个工作,并且可以直接pthread_continue该线程。线程知道什么时候没有更多的工作,并且可以很容易地pthread_suspend自己。这将不使用锁定,避免蜂拥而至,并且速度更快。Problem is....no pthread_suspend or _continue。

有什么想法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-06-08 09:33:36

让线程等待特定的信号。

使用pthread_sigmasksigwait

票数 8
EN

Stack Overflow用户

发布于 2010-06-08 10:50:21

让线程在管道读取时阻塞。然后通过管道分派数据。线程将在它们需要处理的数据到达时被唤醒。如果数据非常大,只需通过管道发送一个指针。

如果特定的数据需要转到特定的线程,那么每个线程需要一个管道。如果任何线程可以处理任何数据,那么所有线程都可以在同一管道上阻塞,并且它们将唤醒循环。

票数 3
EN

Stack Overflow用户

发布于 2010-06-08 10:49:32

在我看来,这样的解决方案(即使用"pthread_suspend“和"pthread_continue")是不可避免的。

从工作线程完成工作到决定挂起自己,再到实际发生挂起之间,可能会经过任意一段时间。如果主线程在这段时间内决定该工作线程应该再次工作,则“继续”将不起作用,并且工作线程将不管怎样挂起自己。

(请注意,这不适用于允许"continue“排队的挂起方法,如其他答案中提到的sigwait()read()方法)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2994216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档