`
izuoyan
  • 浏览: 9196855 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

[Windows编程] 开发DLL必读《Best Practices for Creating DLLs》

阅读更多

开发DLL的时候,需要十分注意 DllMain 函数,因为在多线程环境下DLLMain里面的代码很容易引发线程死锁。 这篇MSDN文章《Best Practices for Creating DLLs》深入讨论了开发DLL的时候应该注意哪些事项, 非常推荐。

简单来说,系统在装载DLL 的时候会自动产生一个Loader Lock, 避免多个DLL同时被装载。 LoaderLock从API函数LoadLibrary调用的开始就自动加锁, 直到DllMain 退出为止。 常见到一些开发者喜欢在DllMain 里面写大量的初始化代码(比如 CoInitializeEx, LoadLibraryEx,CreateProces ,创建线程,同步线程 等等..),这些初始化代码很容易产生其他的lock,进而导致进程死锁。

Loader Lock 示意图:

DLL Loader Lock  DLLMain

死锁的一个例子:

DLL 死锁

>> 原创文章的版权属于作者,转载请注明出处(http://blog.csdn.net/WinGeek/), 谢谢。 <<

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics