使用alarm
功能,我想实现UDP重传。这个功能线程安全吗?它会在多线程环境下工作吗?
答案 0 :(得分:3)
在线程中调用alarm()
将不会重置挂起的信号,因此您可能不希望在线程中将其命名为。如果基础功能是pthreads,那么无论您使用何种语言,您都只想在父级中调用它。
你可能最好在与线程共享的结构中根据需要重新发送数据,或者在服务父节点中的信号时,将所有(或某些)正在运行的线程重新发送。
我想不出一个实现,在一个线程中调用它会是一个好主意,所以不 - 我不会那样使用它。
答案 1 :(得分:2)
alarm()函数不是线程安全的。
因为它是流程级别。定时器触发后,您无法控制哪个线程应该接收信号。因此,在信号到达时,另一个线程可能正在运行。有时它可能会使您使用SIG_SEGV崩溃。
答案 2 :(得分:0)
根据docs alarm
是“进程级别”并且只有最后一次调用是活动的...它使用SIGNAL模型并向进程发送异步SIGALARAM ...是否被称为信号处理程序的线程安全取决于你的实现......