Ist mq_send Atom?
-
10-07-2019 - |
Frage
kann mir jemand sagen, was passiert, wenn Multi-Thread-Programm empfängt SIGSTOP Signal während der Ausführung von mq_send?
Lösung
Der Mann Seite für mq_send
gibt es oben auf mq_timedsend
implementiert, die ein Systemaufruf in Linux. Systemaufrufe sind in der Regel atomar, dass sie entweder erfolgreich sein oder sie es nicht tun. Wenn ein Systemaufruf durch ein Signal unterbrochen wird, ist das übliche Verhalten zurückzukehren -1 und setzt errno
EINTR
. Es sieht aus wie mq_send
dieses Verhalten hat.
Grundsätzlich sollten Sie für EINTR
überprüfen, und den Anruf wiederholen, wenn es auf diese Weise versagt. Dies ist besonders wichtig für Systemaufrufe, die wie recv
oder select
blockieren können, da sie eine höhere Chance, unterbrochen haben.