Aborting thread sleep on Linux
我是一个新手 linux 开发人员,所以我不知道具体如何解决问题。
在我的主线程中,我生成了许多工作线程,每个工作线程都执行其任务并hibernate几秒钟。
在某些情况下我必须终止。我需要避免等待每次睡眠终止,因此我想向每个线程发送一个信号以中断睡眠(在我的情况下为 nanosleep)并终止 threadproc 循环。
我阅读了很多关于 pthread_kill 的文档,但是当我向线程发送例如 SIGUSR1 时,进程以异常方式终止。
有人能指点我的解决方案吗?
非常感谢!!!
Edit: Solved, the solution was pthread_cond_timedwait and pthread_cond_signal.
- 您可能想谷歌”条件变量”。
- 你在谈论 pthread_cond_timedwait 吗?问候。
- 我不知道您的代码的详细信息,但这听起来像是条件变量的工作:cs.nmsu.edu/~jcook/Tools/pthreads/pthread_cond.html
- 为什么线程会hibernate?如果他们有工作要做,他们就应该去做。如果他们没有工作要做,他们应该在等工作,而不是睡觉。理想情况下,您只需使用一些正常机制来告诉线程没有更多工作,就像您告诉它们有更多工作一样。否则,请查看 pthread_cancel 或条件变量。但最有可能的是,设计很糟糕。
- 谢谢Galik,我已经阅读了您建议的链接,这也许是解决方案…
- 我刚刚实现了基于 pthread_cond_signal 和 pthread_cond_timedwait 的解决方案,我确认如果可行!!!
我不知道您的代码的详细信息,但这听起来像是条件变量的工作:cs.nmsu.edu/~jcook/Tools/pthreads/pthread_cond.html – Galik
我刚刚实施了基于 pthread_cond_signal 和 pthread_cond_timedwait 的解决方案,我确认如果可行!!! – 敢死队
在发送信号时,您正在做正确的事情。
唯一缺少的是捕捉该信号。您必须用自己的信号操作替换信号操作。在信号处理程序中,您可以设置一个变量并在 sleep 返回后检查它。
查看 sigaction
来源:https://www.codenong.com/35120686/