是则mq_send原子?
-
10-07-2019 - |
题
有谁能够告诉我,如果多线程程序则mq_send的执行过程中接收到SIGSTOP信号会发生什么?
解决方案
在手册页mq_send
指示它是在mq_timedsend
,这是在Linux的系统呼叫的基础上实现。系统调用是通常原子在他们成功或他们不这样做。如果一个系统调用信号中断,通常的行为是返回-1,并设置errno
到EINTR
。它看起来像recv
有这种行为。
基本上,你应该检查select
,如果它以这种方式失败重试呼叫。这是系统调用可能阻塞等<=>或<=>特别重要,因为它们具有被中断的机会较高。
不隶属于 StackOverflow