2

有了alarm函数,我想实现UDP重传。这个函数线程安全吗?它会在多线程环境下工作吗?

4

3 回答 3

3

在线程中调用alarm()不会重置挂起的信号,因此您可能不想线程中调用它。如果底层功能是 pthreads,那么无论您使用什么语言,您都只想在父级中调用它。

您可能最好在与线程共享的结构中进行规定,以便根据需要重新发送数据,或者戳所有(或部分)正在运行的线程以在为父级中的信号提供服务时重新发送。

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

于 2012-10-08T03:51:21.513 回答
2

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

因为它是过程级别。一旦计时器触发,您就无法控制哪个线程应该接收信号。所以在信号到达的时候,另一个线程可能正在运行。有时它可能会使您使用 SIG_SEGV 使您的程序崩溃。

于 2013-03-22T07:20:44.210 回答
0

根据文档 alarm是“进程级”并且只有最后一个调用处于活动状态......它使用信号模型并向进程发送异步SIGALARAM......被调用的信号处理程序是否是线程安全的取决于您的实现......

于 2012-10-08T03:41:20.137 回答