【发布时间】:2011-08-08 15:31:35
【问题描述】:
僵尸线程在 C/C++ 中是如何形成的,为了防止它们被创建,您需要确保做什么?我知道它们只是没有正确终止的普通线程,但我对细节有点模糊。
【问题讨论】:
标签: multithreading posix
僵尸线程在 C/C++ 中是如何形成的,为了防止它们被创建,您需要确保做什么?我知道它们只是没有正确终止的普通线程,但我对细节有点模糊。
【问题讨论】:
标签: multithreading posix
僵尸线程是一个已终止的可连接线程,但它 尚未加入。通常,任何一个线程都应该在某个位置加入 时间,或者它应该被分离。否则,操作系统保持其状态 对于一些可能的未来加入,这需要资源。
【讨论】:
pthread_exit。而pthread_cancel 可能很棘手,并且不能保证线程会终止。
pthread_cancel 请求取消,它不会强制取消。取消只能发生在代码中的特定位置;它可以被pthread_cancel_state 阻塞,或者在某些系统请求中,它调用清理处理程序,这些处理程序不一定会完成(并且取消只会在它们完成后终止线程)。终止线程是一个复杂的问题,有时pthread_cancel 是必要的,但永远不够;线程必须合作。
您是指 pthread 还是僵尸进程?当父进程没有收获它的子进程时,就会创建一个僵尸进程(不是线程)。这是因为如果父级以后需要它,操作系统会保留进程的返回状态。如果父母死了,孩子会被交给初始化线程,它只是坐在那里一遍又一遍地调用“等待”(收获任何死去的孩子)。所以只有当父进程还活着,子进程已经终止时,才能创建僵尸进程。
这同样适用于 pthread。如果您分离线程,它不会在它完成后保持该进程终止状态(类似于进程)。
【讨论】: