能力值:
( LV2,RANK:10 )
|
-
-
2 楼
常见死锁有两种:
1) 假设两个线程 A、B,分别有两个锁 1、2
A 锁 1
B 锁 2
A 锁 2
B 锁 1
这时会死锁,这种情况叫互锁。
2) 还有一种就是在还没有 Unlock 时又企图去 Lock 一个锁。
你所说的 WaitForxxxObject 函数死锁,是因为它等待的信号没有发生造成。
检查你的信号句柄是否已经设置。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
[QUOTE=seu人;1312294]{
HANDLE h[2];
h[0] = hAutoResetEvent1; //event 是自动的,初始信号为未触发
h[1] = hAutoResetEvent1; //event 是自动的,初始信号为未触发
waitformutipleobjects(2, h, true,...[/QUOTE]
死锁的原因是:
线程1的等待函数发现 event1 有信号,event2没有信号。
所以不会对event1对象产生任何的副作用。
接下来,event2有信号后,系统会让2个事件 都设为未触发的。
让一个线程执行。另一个线程,会继续等待。
这就防止死锁了。
如果waitformutiple不是原子操作。
比如线程1 对事件1 产生副作用后,事件1就会未触发。
线程2 对事件产生副作用后,事件2就会为触发
线程1等待 事件2
线程2 等待 事件1
造成死锁。
当然这一切,都是黑盒猜测,waitformutiple的源码没有看到。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
三角债知道吧,互相欠钱,死循环
|
|
|