Боюсь, я не уверен, что я делаю здесь не так.У меня есть многопоточное приложение, которое запускает 3 потока при запуске
[root@Embest /]# ps
1111 root 608 S fw634c_d_cdm_sb
1112 root 608 S fw634c_d_cdm_sb
1113 root 608 S fw634c_d_cdm_sb
, а затем ожидает в режиме ожидания команды от последовательного порта.после того, как он запускается и возвращается в режим ожидания, я проверяю с помощью ps, что происходит;есть зомбированные экземпляры приложения (и имя файла тоже sq.bracketed)
1114 root Z [fw634c_d_cdm_sb]
...
...
...
1768 root Z [fw634c_d_cdm_sb]
около 628 из них.
Дело в том, что я придерживаюсь следующей политики:
- для отсоединяемых потоков - все равно (они завершат работу и освободят ресурсы самостоятельно после завершения)
-для присоединяемых потоков - я запускаю pthread_join после запуска pthread_create и жду завершения многопоточной функции.как это:
if (pthread_create(&tmp_thrd_id,&attr_joinable,run_function,(void *)&aStruct)!=0){
DEBUG(printf("thread NOT created \n"));
}else{
DEBUG(printf("thread created !\n"));
if (pthread_join(tmp_thrd_id,NULL)!=0){
DEBUG(printf("\nERROR in joining \n"));
}else{
DEBUG(printf("Thread completed\n"));
}
}
Я запускаю только pthread_exit (NULL) в main, который не делает ничего, и после запуска просто лежит только потому, что его нельзя убить.
iЯ, вероятно, подделываю что-то жизненно важное здесь.но не могу уточнить, что после прочтения нескольких основных руководств по темам ...
спасибо за вашу помощь