求好的线程互斥解决方案
有两个对象,A,BA有CallB函数,会调用B的test函数
B有CallA函数,会调用A的test函数
简单的说,有两个线程,分别会做这个事情
线程1调用A的CallBA::CallB()->B::test
线程2调用B的CallAB::CallA()->A::test
如果CallA CallB内部都有一个临界区,进入函数就上锁。
以上程序有什么危险,能怎么解决 :victory: 小康。。哈哈,王者归来啊。。 刚刚看到C++编程思想第二卷的线程部分... http://gdutbbs.com/viewthread.php?tid=69117&highlight=%CF%DF%B3%CC
搜了下线程 。。。只有四帖.... java线程互锁的问题我也没办法解决。。 JDK5.0可以用Lock实现
不知这样行不?
首先将函数调用理解为“请求”。A.callB和B.callA很可能同时请求对方的test函数,而此时各自的test函数已经上锁。这样的话,A.callB和B.callA就会出现“请求环"。
在保护原有请求需求的条件下,解决方法就是要去除任何时刻的请求环,只要将相互的请求安排在不同时间就可以。
可以增加一个控制变量(临界变量)来控制请求的顺序。比如:增加一个A和B都可以访问的临界变量c,
1,c初始为false
2,仅当c==false时,才可以进入B.callA的A.test 或进入A.callB的B.test,
3,一旦进入B.callA的A.test 或进入A.callB的B.test,就令c=true,离开时令c=false
这样就可以避免B.callA请求A.test时A.callB也在请求B.test所造成的死锁
[ 本帖最后由 yonhe 于 2007-4-30 16:37 编辑 ]
页:
[1]