«Как вы закрываете нить, когда закончите?»
Либо простое возвращение из этой функции, либо вызов pthread_exit function.
Обратите внимание, что вызов return
также вызывает стек быть разматывают и переменные, объявленные в начальной процедуре должны быть уничтожены, таким образом, это более предпочтительно, чем pthread_exit
функции:
An implicit call to pthread_exit() is made when a thread other than the thread in
which main() was first invoked returns from the start routine that was used to
create it. The function's return value shall serve as the thread's exit status.
Для получения дополнительной информации и посмотреть на: return() versus pthread_exit() in pthread start functions
«убедившись, что ничего открыто больше или подножка»
Вместо того, чтобы убедиться wheth ваш поток все еще работает, вы должны дождаться его завершения, используя pthread_join function.
Вот пример:
void *routine(void *ptr) {
int* arg = (int*) ptr; // in C, explicit type cast is redundant
printf("changing %d to 7\n", *arg);
*arg = 7;
return ptr;
}
int main(int argc, char * const argv[]) {
pthread_t thread1;
int arg = 3;
pthread_create(&thread1, NULL, routine, (void*) &arg);
int* retval;
pthread_join(thread1, (void**) &retval);
printf("thread1 returned %d\n", *retval);
return 0;
}
выход
changing 3 to 7
thread1 returned 7
BTW в вашем примере, когда основной() достигает 'возвращение 0', вся ваша программа выходит (включая ваш PTHREAD). –
Это правильно, просто убедитесь, что я использую меньше энергии – user1417815