关于 c :Aborting thread sleep on Linux | 珊瑚贝

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/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?