请教DLL死锁问题
网上资料:
进程创建的时候,会创建一把锁,用于DllMain调用时候的序列化,如果在DllMain中的DLL_PROCESS_ATTACH中创建一个线程,然后等待该线程退出,会导致死锁,原因是线程创建时候需要打开进程的序列化锁,而进程的序列化锁在DLLMain函数没有退出前没有被释放。
问题1:
我在DllMian的DLL_PROCESS_ATTACH中调用LoadLibrary函数,加载另外一个DLL,按照上面的解释,LoadLirary函数内部会调用加载DLL的DllMain函数,应该也会使用到进程的序列化锁,但是为什么不会导致死锁?
问题2:我开发了一个DLL,DLL有一个Start函数,该函数内部启动了N个线程。另外DLL有一个Stop函数,该函数是停止这N个线程,如果别人拿到我这个DLL,只是调用Start函数,而没有调用Stop函数就调用FreeLibrary函数,就会有可能导致异常,本想在DllMian的DLL_PROCESS_DEATCH中调用Stop函数确保线程退出,但是按照网上的解释,线程退出的时候,会获取进程的序列化锁,而这把锁正被当前的DllMian函数的线程拥有,这样就会死锁。请问,DLL被释放的时候,我应该在什么地方保证DLL创建的线程退出呢?
谢谢高手