相关疑难解决方法(0)

在卸载DLL时删除静态对象时退出线程导致死锁?

我在延迟加载的DLL中有一个实例(全局/静态对象)ClassA.这个对象里面有一个"Observer"线程,它是执行正常关闭所必需的.当我调用FreeLibrary时,我注意到在删除此静态对象期间,我的线程请求关闭但挂起_endthreadex()并导致死锁.如果我明确地或隐含地调用_endthreadex并不重要.对象是全局的还是静态的 - 无关紧要 - 结果相同.此线程包含在ClassB中(由带有自定义消息循环的模板实现).有一个请求关闭线程(post message)和WaitForSingleObject,它永远不会返回给定的线程heandle.

在代码和关机的任何地方都使用相同的"模板线程类".删除静态obj时唯一的问题.我认为_endthreadex()里面有一些锁已经锁定在dll卸载和删除静态对象上.

线程以_beginthreadex开头.PS.当我在App-app内部实例化相同的静态obj时,没有任何重大问题.

任何想法为什么_endtreadex导致死锁?怎么避免呢?

c++ windows multithreading deadlock

6
推荐指数
1
解决办法
2766
查看次数

标签 统计

c++ ×1

deadlock ×1

multithreading ×1

windows ×1