在 CSAPP 书第 12.3 节中,他们说..
线程通过调用pthread_exit函数显式终止。如果主线程调用pthread_exit,它会等待所有其他对等线程终止,然后终止主线程和整个进程,返回值为 thread_return。
但是在pthread_exit的手册页中:https ://man7.org/linux/man-pages/man3/pthread_exit.3.html
从除主线程之外的任何线程的启动函数执行返回会导致对 pthread_exit() 的隐式调用,使用函数的返回值作为线程的退出状态。
为了允许其他线程继续执行,主线程应该通过调用 pthread_exit() 而不是 exit(3) 来终止。
关于pthread_exit的两个描述是不同的。第一个说主线程将等待对等点,但不是第二个。
因此我编写了一个代码来确保正确的属性。
(我借用了一些代码行当主线程退出时,其他线程是否也退出?)
(感谢https://stackoverflow.com/users/959183/laifjei)
由于pthread_cancel在pthread_exit之前调用,主线程成功取消 t1 线程,结果如下,
但是,当我将代码修改为 '42 line -> add //' 和 '44 line -> delete //' 时,主线程无法取消 t1,因为它已经终止。因此,以下结果看起来像,,
最后,我得出结论,手册页的属性是正确的。我对吗?
为什么CSAPP书说“它等待所有其他对等线程终止”?