Боюсь, я не уверен, что я делаю неправильно здесь. У меня есть многопоточное приложение, которое запускает 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, что происходит; есть зомбированные экземпляры приложения (и имя файла тоже в квадратных скобках)
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 , который мало что делает и после запуска просто лежит без дела только потому, что его нельзя убивать.
Я, наверное, забыл что-то важное здесь. но не могу понять, что после прочтения нескольких основных руководств по потокам....
Спасибо за помощь
pthread_create
куда-то еще? - person cnicutar   schedule 13.02.2012pthreads
описывает некоторые проблемы с LinuxThreads, но для уродливого поведения, подобного этому, вам, возможно, придется копаться в исходниках... - person R.. GitHub STOP HELPING ICE   schedule 13.02.2012