请教一个关于线程和回调函数的问题
在Linux下一个小程序,启动一个线程,中间使用了Mutex锁,在加锁和解锁间注册了一个回调函数A,回调函数A中调用一个另外的函数B,函数B中同样有Mutex锁。
但是运行中出现了死锁,Debug中发现当线程在加锁和解锁间突然回调函数运行,当回调函数中的函数B试图请求锁的时候,出现死锁
想象中,应该是回调函数B等待线程放弃Mutex然后获得Mutex,然后把回调函数执行完,然后放弃Mutex,但是象上面的情况下出现了死锁
请教一下大家,是不是会调函数一定要一次执行完,而不允许中间等待某一个线程,(因为回调函数不是一个线程),还是可以理解为主线程的一个部分呢
由于我的回调函数一定要使用一些哪个线程的资源,所以回调函数一定要使用一个锁,请大家帮我解决一下这个问题,困惑了好久
问题点数:40、回复次数:3Top
1 楼Wolf0403(废人:独活十年~心如刀割)回复于 2003-12-01 09:26:09 得分 20
回调函数,在我的印象里,也就是一个函数指针解除引用,所以还是作为主线程的一个片段而不是一个独立线程运行的。也就是说: A -> 加锁 -> B -> 请求 Mutex -> 释放 Mutex -> 回到 A -> 释放 Mutex
这里当然出现了死锁Top
2 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-12-01 10:32:42 得分 0
linuxTop
3 楼fireseed(【VC无敌,英明神武,千秋万代,一统江湖!】—奶油狗)回复于 2003-12-01 10:36:12 得分 20
linux我不懂,但你这种情况用
BOOL TryEnterCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
是最好的了Top




