Chinaunix
标题:
sys_wait4中如何避免同thread_group中的两个task,并发回收同一个task
[打印本页]
作者:
motalelf
时间:
2007-10-09 15:20
标题:
sys_wait4中如何避免同thread_group中的两个task,并发回收同一个task
以下讨论假设系统中暂时无TASK_STOPPED的进程 。
SMP中,thread_group中两个task分别为A,B。
B通过sys_fork产生子进程C,且子进程C已经sys_exit,为TASK_ZOMBIE。
A运行在CPUA上,执行系统调用sys_wait4( C的pid,null, null, null )。
B运行在CPUB上,执行系统调用sys_wait4( C的pid,null, __WNOTHREAD, null )。
那么情形如下:
1)CPUA在tasklist_lock中,遍历A的子进程未果,于是继续遍历B的子进程,得C,然后释放tasklist_lock,( 这里2并发),再然后释放C。
2)由于CPUA已经释放tasklist_lock,故CPUB在tasklist_lock中,遍历B的子进程,得C,然后释放tasklist_lock,再然后释放C。
这样,C被释放了两次??????
作者:
puppylove
时间:
2007-10-09 15:20
标题:
回复 #3 motalelf 的帖子
hi,
你说的是一个kernel的一个bug, 以前有人报告过。
http://lkml.org/lkml/2001/11/6/138
这些小bug的report总是被遗漏,所以好几个版本之后才被修正~~
作者:
gta
时间:
2007-10-09 15:42
能说一下内核版本吗?
作者:
motalelf
时间:
2007-10-09 16:02
.4.32
.4.35
作者:
motalelf
时间:
2007-10-10 20:17
原帖由
puppylove
于 2007-10-9 15:20 发表
hi,
老大,能给个MSN之类的东西吗?
可能以后还有其他问题请教,不过不会很多,可以吗?
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2