Multithreading 存在现有联接程序时的pthread_分离行为
我对POSIX线程实现比较陌生,我有一个不确定的极端情况 根据我的理解,可以在可连接的pthread上调用pthread_deatch()来标记它已分离 在线程被分离后,它不需要等待有人加入就可以让系统释放它的资源 我的问题是,如果一个可连接的线程(我们称之为线程B)在线程B创建之后被一个线程(我们称之为线程a)连接,会发生什么。我们还假设线程A连接时线程B正在执行,从而导致线程A暂停,直到线程B完成其执行。同时,线程C在线程B上调用了pthread_deatch() 在这种情况下,处于挂起状态等待线程B完成的线程a会发生什么情况。线程B是否会继续执行,然后线程A被唤醒以获取B的返回值?或者,当线程B被标记为已分离时,线程A是否立即被唤醒?表示: 如果Multithreading 存在现有联接程序时的pthread_分离行为,multithreading,pthreads,Multithreading,Pthreads,我对POSIX线程实现比较陌生,我有一个不确定的极端情况 根据我的理解,可以在可连接的pthread上调用pthread_deatch()来标记它已分离 在线程被分离后,它不需要等待有人加入就可以让系统释放它的资源 我的问题是,如果一个可连接的线程(我们称之为线程B)在线程B创建之后被一个线程(我们称之为线程a)连接,会发生什么。我们还假设线程A连接时线程B正在执行,从而导致线程A暂停,直到线程B完成其执行。同时,线程C在线程B上调用了pthread_deatch() 在这种情况下,处于挂起状态
线程指定的值不正确
pthread\u join()
的参数未引用可连接线程
如果在另一个线程中连接的线程上调用pthread\u deatch()
,则该线程不再可连接,因此pthread\u join()
的行为将变得未定义
换句话说,这是不允许的
如果您发现需要“提前”唤醒加入线程,则可以对其使用线程取消(pthread\u join()
是取消点),或者设置一个条件变量,使其等待,而不是pthread\u join()