我发现在以下代码中,每次接受新客户端时都会创建一个线程。并且在函数pthread_client()中没有退出日志。但是似乎命令ps aux
我的理解是,每次使用相同的tid创建新线程时,具有相同tid的旧线程将被自动杀死,对吗? 谢谢!
while(1){
fd = accept(...);
pthread_create(&tid1, NULL, (void *)pthread_client, (void *)arg);
pthread_detach(tid1);
}
答案 0 :(得分:1)
我的理解是,每次使用相同的tid创建新线程时,具有相同tid的旧线程将被自动杀死,对吗?谢谢!
不,你错了!
从手册中:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
在返回之前,成功调用pthread_create()会存储ID 线程指向的缓冲区中新线程的数量;
这意味着:每次调用都会在变量tid
中存储一个 new 值。旧值将被覆盖,只是代码中不再使用它了。因此,您总会得到一个新线程,但是您的代码以后将无法访问“旧”线程。但是,正如您所看到的,您的代码只是从当前创建的新线程中分离出来,因此以后无需进行任何处理。
先前创建的线程只是继续。您无法通过调用pthread_create
杀死正在运行的线程。