Pergunta

Alguém pode me dizer o que acontece se o programa multithread recebe o sinal SIGSTOP durante a execução de mq_send?

Foi útil?

Solução

A página man para mq_send indica que está implementado em cima do mq_timedsend, que é uma chamada de sistema em Linux. As chamadas do sistema são geralmente atômica em que quer ter sucesso ou não. Se uma chamada de sistema é interrompida por um sinal, o comportamento usual é retornar -1 e conjunto errno para EINTR. Parece que mq_send tem esse comportamento.

Basicamente, você deve verificar se há EINTR, e repita a chamada, se ele falhar desta forma. Isto é particularmente importante para as chamadas de sistema que possam bloquear como recv ou select, já que eles têm uma chance maior de ser interrompido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top