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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/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
Multithreading 存在现有联接程序时的pthread_分离行为_Multithreading_Pthreads - Fatal编程技术网

Multithreading 存在现有联接程序时的pthread_分离行为

Multithreading 存在现有联接程序时的pthread_分离行为,multithreading,pthreads,Multithreading,Pthreads,我对POSIX线程实现比较陌生,我有一个不确定的极端情况 根据我的理解,可以在可连接的pthread上调用pthread_deatch()来标记它已分离 在线程被分离后,它不需要等待有人加入就可以让系统释放它的资源 我的问题是,如果一个可连接的线程(我们称之为线程B)在线程B创建之后被一个线程(我们称之为线程a)连接,会发生什么。我们还假设线程A连接时线程B正在执行,从而导致线程A暂停,直到线程B完成其执行。同时,线程C在线程B上调用了pthread_deatch() 在这种情况下,处于挂起状态

我对POSIX线程实现比较陌生,我有一个不确定的极端情况

根据我的理解,可以在可连接的pthread上调用pthread_deatch()来标记它已分离

在线程被分离后,它不需要等待有人加入就可以让系统释放它的资源

我的问题是,如果一个可连接的线程(我们称之为线程B)在线程B创建之后被一个线程(我们称之为线程a)连接,会发生什么。我们还假设线程A连接时线程B正在执行,从而导致线程A暂停,直到线程B完成其执行。同时,线程C在线程B上调用了pthread_deatch()

在这种情况下,处于挂起状态等待线程B完成的线程a会发生什么情况。线程B是否会继续执行,然后线程A被唤醒以获取B的返回值?或者,当线程B被标记为已分离时,线程A是否立即被唤醒?

表示:

如果
线程指定的值不正确
pthread\u join()
的参数未引用可连接线程

如果在另一个线程中连接的线程上调用
pthread\u deatch()
,则该线程不再可连接,因此
pthread\u join()
的行为将变得未定义

换句话说,这是不允许的

如果您发现需要“提前”唤醒加入线程,则可以对其使用线程取消(
pthread\u join()
是取消点),或者设置一个条件变量,使其等待,而不是
pthread\u join()