-
-
未解决
[求助]关于卸载dll时候可能出现的多线程同步问题以及临界区资源的删除时机
50.00雪花
-
发表于:
2021-4-19 17:50
3189
-
未解决 [求助]关于卸载dll时候可能出现的多线程同步问题以及临界区资源的删除时机
50.00雪花
关于卸载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.
意思是如果临界区对象已被删除,那么等待获得临界区所有权,进入临界区的线程的状态是未定义的。
所以这里涉及到一个临界区对象的删除问题,怎么处理才好呢
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!