报警(unsigned int second)函数thread_safe?

时间:2012-10-08 03:31:36

标签: c linux

使用alarm功能,我想实现UDP重传。这个功能线程安全吗?它会在多线程环境下工作吗?

3 个答案:

答案 0 :(得分:3)

在线程中调用alarm()将不会重置挂起的信号,因此您可能不希望在线程中将其命名为。如果基础功能是pthreads,那么无论您使用何种语言,您都只想在父级中调用它。

你可能最好在与线程共享的结构中根据需要重新发送数据,或者在服务父节点中的信号时,将所有(或某些)正在运行的线程重新发送。

我想不出一个实现,在一个线程中调用它会是一个好主意,所以不 - 我不会那样使用它。

答案 1 :(得分:2)

alarm()函数不是线程安全的。

因为它是流程级别。定时器触发后,您无法控制哪个线程应该接收信号。因此,在信号到达时,另一个线程可能正在运行。有时它可能会使您使用SIG_SEGV崩溃。

答案 2 :(得分:0)

根据docs alarm是“进程级别”并且只有最后一次调用是活动的...它使用SIGNAL模型并向进程发送异步SIGALARAM ...是否被称为信号处理程序的线程安全取决于你的实现......