Mq_send è atomico?
-
10-07-2019 - |
Domanda
qualcuno può dirmi cosa succede se il programma multithread riceve il segnale SIGSTOP durante l'esecuzione di mq_send?
Soluzione
La pagina man per mq_send
indica che è implementata sopra mq_timedsend
, che è una chiamata di sistema in Linux. Le chiamate di sistema sono generalmente atomiche in quanto hanno successo o no. Se una chiamata di sistema viene interrotta da un segnale, il comportamento normale è di restituire -1 e impostare errno
su EINTR
. Sembra che mq_send
abbia questo comportamento.
Fondamentalmente, dovresti controllare EINTR
e ritentare la chiamata se fallisce in questo modo. Ciò è particolarmente importante per le chiamate di sistema che potrebbero bloccarsi come recv
o select
, poiché hanno maggiori probabilità di essere interrotte.