Во-первых, mq_notify () будет запускать только один поток за раз.Во-вторых, потоки не запускаются каждый раз, когда сообщение помещается в очередь;они запускаются только тогда, когда очередь, которая была пуста, получает новое сообщение.В-третьих, mq_notify () - одноразовая сделка.После того, как поток запущен, если вы хотите запустить новый, в следующий раз, когда пустая очередь получит сообщение, вам необходимо заново зарегистрироваться в mq_notify ().Обычно одно из первых действий, которое должен выполнять ваш threadfunc, - это перерегистрация.
Поскольку вы запускаете поток и обрабатываете сообщения, я предполагаю, что вы не открыли очередь как O_NONBLOCK или не сбросили ее до значения с помощью mq_setattr).Когда поток запускается, вы хотите опустошить очередь всех сообщений, чтобы другой поток мог запуститься в следующий раз.Если очередь находится в режиме блокировки, вы собираетесь заблокировать ее после получения последнего сообщения, и поток никогда не закончится.В неблокирующем режиме вы хотите продолжить чтение, пока не получите errno == EAGAIN, а затем закончите поток.Вы должны быть готовы перейти к следующей партии сообщений с новой темой.