É mq_send atômica?
-
10-07-2019 - |
Pergunta
Alguém pode me dizer o que acontece se o programa multithread recebe o sinal SIGSTOP durante a execução de mq_send?
Solução
A página man para mq_send
indica que está implementado em cima do mq_timedsend
, que é uma chamada de sistema em Linux. As chamadas do sistema são geralmente atômica em que quer ter sucesso ou não. Se uma chamada de sistema é interrompida por um sinal, o comportamento usual é retornar -1 e conjunto errno
para EINTR
. Parece que mq_send
tem esse comportamento.
Basicamente, você deve verificar se há EINTR
, e repita a chamada, se ele falhar desta forma. Isto é particularmente importante para as chamadas de sistema que possam bloquear como recv
ou select
, já que eles têm uma chance maior de ser interrompido.