现在的位置: 首页 > 综合 > 正文

suspend造成死锁的例子和原因分析

2013年08月28日 ⁄ 综合 ⁄ 共 1142字 ⁄ 字号 评论关闭

 

今天loris分享了一个关于使用suspend造成死锁的例子,部分代码如下:

 

win32下的API基本都是线程安全的,因此API里面有很多线程同步的地方,LoadLibrary里面有一个临界区,线程函数在执行到LoadLibrary里面之后,如果刚好走到LoadLibrary的临界区里面,此时主线程的ontimer触发,将该线程挂起,ontimer继续执行,运行到LoadLibrary后,由于线程中LoadLibrary还没有从临界区出来,此时就造成主线程ontimer里面的LoadLibrary无限等待,主线程挂起。

因此不建议用suspend暂停线程,MSDN也有说明,suspend最好只在debug里面使用。

那怎么使线程挂起呢?可以使用事件等方式,用wait族函数来暂停线程。

 

【END】

抱歉!评论已关闭.