pthread_create将终止具有相同tid的先前线程?

时间:2019-03-13 07:14:12

标签: linux multithreading

我发现在以下代码中,每次接受新客户端时都会创建一个线程。并且在函数pthread_client()中没有退出日志。但是似乎命令ps aux

不会创建多线程。

我的理解是,每次使用相同的tid创建新线程时,具有相同tid的旧线程将被自动杀死,对吗? 谢谢!

while(1){
    fd = accept(...);
    pthread_create(&tid1, NULL, (void *)pthread_client, (void *)arg);
    pthread_detach(tid1);
}

1 个答案:

答案 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杀死正在运行的线程。