拥有这段代码:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
void* PrintHello(void* data){
printf("Hello from new thread\n");
pthread_exit(NULL);
}
int main(int argc, char* argv[]){
int rc;
pthread_t thread_id;
T_DATA data;
Data = init_data();
rc = pthread_create(&thread_id, NULL, PrintHello, (void*)data);
if(rc){
printf("\n ERROR: return code from pthread_create is %d \n", rc);
exit(1);
}
sleep(100);
printf("\n Created new thread (%d) ... \n", thread_id);
pthread_join(thread_id);
}
当main
创建新主题然后执行sleep(100)
时,新主题可能会在pthread_exit
到达main
之前达到pthread_join
。无论如何新线程等待并且他的资源在main
执行pthread_join
之前不会被释放所以如果我执行ps
命令,我将在接下来的100秒内看到新线程,我是对的吗?如果我使用pthread_detach
代替pthread_join
,我会得到相同的行为吗?我想知道新线程在主线程执行pthread_exit
之前执行pthread_detach
时会发生什么。
答案 0 :(得分:1)
当然,线程在终止之前无法清除。但是在加入或分离之前也无法清理它。在没有分离的情况下终止的线程将保留足够的信息以允许另一个线程加入它。