当前位置: 首页 > news >正文

[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/), 谢谢。 <<

相关文章:

  • LeetCode -- Assign Cookies
  • 10g在ia64无法安装的错误
  • LeetCode --Shortest Palindrome
  • 几种第三方数据库工具之比较
  • LeetCode -- Integer Break
  • 今天你培训了吗?
  • JS Scheduler - DayPilot
  • 给华育国际的学员分讲了一堂课:如何做技术
  • Sql Server递归查询实例
  • Asp.net 多语言界面的实现方法...
  • SQL -- 使用PARTITION和RANK函数完成统计
  • GridView 实现固定表头,但可以纵向,横向滚动Item
  • 使用bot service创建azure bot
  • LeetCode -- Divide Two Integers
  • 系列文章:内容模型系统开发总结二(内容模型系统用例设计)
  • @jsonView过滤属性
  • [nginx文档翻译系列] 控制nginx
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 08.Android之View事件问题
  • android图片蒙层
  • Laravel5.4 Queues队列学习
  • supervisor 永不挂掉的进程 安装以及使用
  • Xmanager 远程桌面 CentOS 7
  • 多线程 start 和 run 方法到底有什么区别?
  • 多线程事务回滚
  • 技术发展面试
  • 前端自动化解决方案
  • 思考 CSS 架构
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​iOS实时查看App运行日志
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (超详细)语音信号处理之特征提取
  • (独孤九剑)--文件系统
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (力扣)循环队列的实现与详解(C语言)
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)visual stdio 书签功能介绍
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Core与存储过程(一)
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET Reactor简单使用教程
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET开发人员必知的八个网站
  • .NET框架设计—常被忽视的C#设计技巧
  • /var/spool/postfix/maildrop 下有大量文件
  • [ IO.File ] FileSystemWatcher
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [383] 赎金信 js
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [android] 天气app布局练习