Почему pthread_exit(0) зависает в программе?
Запуск следующего кода C приводит к зависанию программы и не отвечает на сигналы (включая CTRL-C).
int main()
{
pthread_exit(0);
return 0;
}
Есть идеи почему?
Поведение является нормальным, когда другие потоки были созданы и работают, но я хотел бы знать, должен ли я всегда проверять это перед использованием pthread_exit(0).
РЕДАКТИРОВАТЬ: Это полный код, который висит. Однако я собирал с помощью glib (-lglib-2.0). Использование просто cc -o foo foo.c работает как положено.
1 ответ
Весь ваш вариант использования описан в примечаниях к справочной странице pthread_exit. В вашем случае, когда вы правильно отредактировали свой OP, glib запустил другой поток. Вы вышли из основного потока, а другой поток продолжил работу. Вы отметили это как зависание. В общем, если вы хотите выйти из приложения в полном объеме, просто используйте exit
или вернуться из main()
,
Только когда вам нужна дополнительная магия (редко), например, отдельные нити, используйте pthread_exit()
в основной теме.