DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
开发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 示意图:
死锁的一个例子:

本文出自 “IE浏览器研发” 博客,转载请与作者联系!

posted on 2013-11-21 10:02  DoubleLi  阅读(432)  评论(0编辑  收藏  举报