Вопрос

Кто-нибудь может мне сказать, что произойдет, если многопоточная программа получит сигнал SIGSTOP во время выполнения mq_send?

Это было полезно?

Решение

Страница man для mq_send указывает, что она реализована поверх mq_timedsend , который является системным вызовом в Linux. Системные вызовы, как правило, являются атомарными в том смысле, что они либо успешны, либо нет. Если системный вызов прерывается сигналом, обычное поведение - вернуть -1 и установить для errno значение EINTR . Похоже, mq_send имеет такое поведение.

Как правило, вы должны проверить наличие EINTR и повторить вызов, если он не пройдет таким образом. Это особенно важно для системных вызовов, которые могут блокировать, например, recv или select , поскольку у них больше шансов быть прерванными.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top