Mq_send est-il atomique?
-
10-07-2019 - |
Question
Quelqu'un peut-il me dire ce qui se passe si un programme multithread reçoit le signal SIGSTOP lors de l'exécution de mq_send?
La solution
La page de manuel relative à mq_send
indique qu'elle est implémentée au-dessus de mq_timedsend
, qui est un appel système sous Linux. Les appels système sont généralement atomiques dans la mesure où ils réussissent ou non. Si un appel système est interrompu par un signal, le comportement habituel consiste à renvoyer -1 et à définir errno
sur EINTR
. Il semble que mq_send
ait ce comportement.
En gros, vous devriez vérifier EINTR
et réessayer l'appel s'il échoue de cette manière. Ceci est particulièrement important pour les appels système susceptibles de se bloquer, tels que recv
ou select
, car ils risquent davantage d'être interrompus.