首页
社区
课程
招聘
未解决 [求助]关于卸载dll时候可能出现的多线程同步问题以及临界区资源的删除时机 50.00雪花
发表于: 2021-4-19 17:50 3189

未解决 [求助]关于卸载dll时候可能出现的多线程同步问题以及临界区资源的删除时机 50.00雪花

2021-4-19 17:50
3189

关于卸载dll时候可能出现的多线程同步问题的困惑:

比如我写了一个注入dll用来注入到目标进程中,dll中写了有关DLL_THREAD_DETACH处理的代码

DLL_THREAD_DETACH是在线程结束时调用,那么是否回存在这样的问题呢?如果存在. 怎么解决呢


由于目标进程肯定说不准什么时候就会有线程的结束,那么它就会调用我dll的代码,如果被结束的线程的代码执行到我dll代码的同时,我对我的注入代码进行了卸载操作,由于卸载完成,进程空间里已经没有我的dll代码了,但此时被结束的线程的代码指针还在dll的映射的空间中,这不就崩溃了吗


关于临界区资源删除时机的疑惑:

InitializeCriticalSection(MyCs);//初始化临界区

DeleteCriticalSection(MyCs);//删除临界区

EnterCriticalSection(MyCs); //进入临界区

LeaveCriticalSection(MyCs); //离开临界区


关于DeleteCriticalSection这个函数,msdn有一段描述

If a critical section is deleted while it is still owned, the state of the threads waiting for ownership of the deleted critical section is undefined.


意思是如果临界区对象已被删除,那么等待获得临界区所有权,进入临界区的线程的状态是未定义的。


所以这里涉及到一个临界区对象的删除问题,怎么处理才好呢


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 7
活跃值: (195)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
DLL卸载之前必须扫尾,否则肯定崩溃。如果你在DLL里面创建了临界区,虽然你的DLL卸载了 但是你创建的资源还在进程中,所以如果不去处理的话,其他的模块仍然可以正常的使用这个临界区。
2021-4-22 10:13
0
游客
登录 | 注册 方可回帖
返回
//