多线程应用程序中可重用代码中的计时器

时间:2015-11-14 12:30:57

标签: c multithreading unix signals

我正在编写一个多线程应用程序。其中一个线程需要定期执行一些工作,因此我使用setitimer设置计时器,并在计时器到期时将SIGALRM发送到进程。

问题是我事先不知道哪个线程会收到信号。

这可以通过为每个线程设置信号掩码来轻松解决,这样只有一个线程可以接收SIGALRM。但在这种特殊情况下,这似乎并不合适,因为计时器在应用程序的一个模块中注册,这些模块也可用于其他程序。 (作为共享的代码片段。它是某种特殊USB设备的通信包装器。)

建议(和标准)方法需要此代码的用户

  • 在产生线程时,请注意问题并正确设置信号掩码,或
  • 当计时器到期时,自己设置计时器并在上面讨论的模块中调用一些特殊的处理程序。

这似乎不对。

对于一个可重复使用的代码需要定时器来运行的情况,这可能是一个常见的解决方案,这可能会干扰程序其余部分的运行?

感谢您的任何见解。

1 个答案:

答案 0 :(得分:1)

您可以使用pthread_kill来发信号给定一个帖子。然后,您可以使用在受控循环中调用sleeppthread_kill的守护程序线程来为给定的线程计时。

如果您关心全球流程计时器与睡眠的互动,那么您可以使用usleep(或nanosleep)。