- 论坛徽章:
- 0
|
这个实验的目的是想让学生体会到加上lockf的作用,可以互斥的显示在屏幕上。即:完全输出child后完全输出son或者再完全输出daughter。但是真正做实验的时候,发现三个进程还是并发的把结果显示在屏幕上,即:child输出到4000多行,就又开始输出son了。。。。
请问这是为什么呢?错在哪里呢?lockf()不就是加锁,能够保证互斥吗?
首先:体会到加上lockf的作用,说得很不明白,lockf是实现什么作用的,进程之间互斥还是线程之间互斥,看代码应该是进程之间实现互斥的。
其次:你的目的是先child输出,再son输出,但是请仔细分析代码,即使你的lock有效,这样的代码结构能打到效果吗?fork()返回之后子进程和父进程就开始并发执行了,谁能先调用lockf在原理上说是不能确定的。还有:“lockf不就是加锁,能保证互斥吗?”不明白你说的意思,太混沌了。
举个例子,如果你的目的是实现进程之间的互斥,却采用了线程互斥的技术实现了lockf,那么每个进程都在lockf,是没有一点作用的,当然我猜测你的lockf很可能就是在用flock方法。楼主先把问题说清楚吧,呵呵
[ 本帖最后由 duanjigang 于 2008-10-23 07:10 编辑 ] |
|