关于 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.


我不知道您的代码的详细信息,但这听起来像是条件变量的工作:cs.nmsu.edu/~jcook/Tools/pthreads/pthread_cond.html – Galik

我刚刚实施了基于 pthread_cond_signalpthread_cond_timedwait 的解决方案,我确认如果可行!!! – 敢死队


在发送信号时,您正在做正确的事情。
唯一缺少的是捕捉该信号。您必须用自己的信号操作替换信号操作。在信号处理程序中,您可以设置一个变量并在 sleep 返回后检查它。
查看 sigaction