Domanda

qualcuno può dirmi cosa succede se il programma multithread riceve il segnale SIGSTOP durante l'esecuzione di mq_send?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top