Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果拆下已连接的线程,会发生什么情况?_C_Multithreading - Fatal编程技术网

C 如果拆下已连接的线程,会发生什么情况?

C 如果拆下已连接的线程,会发生什么情况?,c,multithreading,C,Multithreading,这个问题是不言自明的,但这里是上下文,基本上我有一个服务器套接字线程,它在接收新连接时生成子线程。这些子线程接受来自远程连接的数据转储,然后清理自己并在完成时关闭 目前,我让子线程在退出之前调用“pthread_detach(pthread_self())”,我考虑的是让程序等待程序关闭,以便活动数据转储完成。现在我实际上已经有了一种替代方法,这是我用来跟踪活动线程的动态数组的一部分,但为了将来的参考,我想知道如果在关闭前加入一个注定要分离的线程,会发生什么,以及它是否会引起任何问题。这是文档中

这个问题是不言自明的,但这里是上下文,基本上我有一个服务器套接字线程,它在接收新连接时生成子线程。这些子线程接受来自远程连接的数据转储,然后清理自己并在完成时关闭


目前,我让子线程在退出之前调用“pthread_detach(pthread_self())”,我考虑的是让程序等待程序关闭,以便活动数据转储完成。现在我实际上已经有了一种替代方法,这是我用来跟踪活动线程的动态数组的一部分,但为了将来的参考,我想知道如果在关闭前加入一个注定要分离的线程,会发生什么,以及它是否会引起任何问题。

这是文档中所说的

如果实现在其生命周期结束后检测到线程ID的使用,建议函数失败并报告[ESRCH]错误。(这两个函数都列出了。)

如果您加入一个分离的线程,应该会返回一个错误


如果拆下连接的线程,也会发生同样的情况。

因此,我假设这意味着拆下线程会使线程ID无效,从而使连接的线程抛出错误?类似的情况。函数将尝试查找id并失败。这意味着pthread_join的实现将在初始调用后一直检查id,这是有意义的,因为如果id变为无效,那么它指向的数据也将无效,从而导致空指针或类似的结果。因此,理论上你仍然可以连接到一个你知道要分离的线程,但是你会期望一个[ESRCH]错误,而不是返回值,谢谢。我宁愿使用一个容器和一些标志。这就是计划,我有一个动态池(数组),其中包含我将要使用的以下结构。“typedef struct{pthread_t worker;bool used;}元素;”,因此每个worker在关闭时只会将used变量设置为false。我想知道这样做会产生什么影响,以备将来参考,所以我知道如果我再次遇到类似的事情,会发生什么。