¿Es mq_send atómico?
-
10-07-2019 - |
Pregunta
¿Alguien puede decirme qué sucede si el programa multiproceso recibe la señal SIGSTOP durante la ejecución de mq_send?
Solución
La página de manual para mq_send
indica que se implementa sobre mq_timedsend
, que es una llamada al sistema en Linux. Las llamadas al sistema son generalmente atómicas en el sentido de que tienen éxito o no. Si una señal interrumpe una llamada al sistema, el comportamiento habitual es devolver -1 y establecer errno
en EINTR
. Parece que mq_send
tiene este comportamiento.
Básicamente, debe verificar EINTR
y volver a intentar la llamada si falla de esta manera. Esto es particularmente importante para las llamadas al sistema que pueden bloquearse como recv
o select
, ya que tienen una mayor probabilidad de ser interrumpidas.