【问题标题】:Sending signal to pthread to abort sleeping向 pthread 发送信号以中止睡眠
【发布时间】:2013-03-28 10:28:58
【问题描述】:

我有一个 pthread 函数,它大部分时间都在使用 usleep() 休眠 有时我想从主进程向线程发送信号以中断睡眠。

问题是我找不到任何关于使用pthread_kill()发送哪个信号的参考

usleep() 手册页指出 SIGALRM 不应与 usleep() 一起使用

我是否需要使用特定的信号,没关系?

【问题讨论】:

  • usleep 在传递给线程/进程的每个信号上返回EINTR。最好使用SIGUSR 信号。此外,usleep 现在已过时:考虑改用nanosleep。作为额外的奖励,您将知道在发送信号时剩余的睡眠时间。

标签: c linux pthreads signals


【解决方案1】:

线程间同步的工具不是信号和usleep(或nanosleep),而是pthread_mutex_tpthread_cond_t的组合。只需让您的线程等待某个条件(这可以通过超时来完成)并让您的main 线程在条件变量上发送一个“信号”。

【讨论】:

  • 你是对的,但是,这是我正在尝试添加功能的遗留应用程序,我不想更改线程的实现。
  • 向线程发送信号会给你带来很多麻烦和头痛。如果可以避免,请不要这样做。信号是进程之间的工具。
【解决方案2】:

usleep 在传递给线程/进程的每个信号上返回EINTR。最好使用SIGUSR 信号。

另外,usleep 现已过时:考虑改用 nanosleep。作为额外的奖励,您将知道在发送信号时还剩多少睡眠时间。

【讨论】:

  • 我认为这不是一个好策略。线程之间的信号处理有点棘手,不适合这种细粒度的控制。
猜你喜欢
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2020-04-08
相关资源
最近更新 更多