• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-02-27 12:08 Aet 隐藏边栏 |   抢沙发  16 
文章评分 3 次,平均分 5.0

原子操作

概念

  1. 所谓原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何context switch
  2. 原子操作可以保证正在工作的动作不被打断,即一旦开始,持续到结束。对比互斥锁优势在于,原子操作是在C/C++的层面,是无锁操作,既能解决并发问题,又不会导致死锁

原理

  1. X86平台,CPU提供了在指令执行期间对总线加锁的手段。
    1. CPU有一根引线#HLOCK pin连接到北桥,如果汇编语言的程序在一条指令前面加上了LOCK前缀,经过汇编以后的机器代码就会使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指令结束时放开,从而把线程锁住
    2. 这样,同一线程上别的CPU就暂时不能通过总线访问内存了,保证了这条指令在多处理器环境中的原子性

代码

检测内存泄露的工具

VLD

  1. Debug模式,链接vld.lib库,在代码加入头文件

LeakDiag

UMDH

发给子线程的消息主线程能不能捕获

通过 PostThreadMessage

  1. 发到子线程消息队列中的消息,只能由子线程自己的 GetMessagePeekMessage 取出,主线程不能从自己的消息循环中直接捕获它
  2. 因为每个线程拥有独立的消息队列

子线程怎样通知主线程

  1. 方案1:向主窗口发送消息

  1. 直接向主线程发送线程消息
    1. 线程消息没有对应窗口,因此msg.hwnd == nullptr
    2. 并且它不会被 DispatchMessage 交给窗口过程。必须在消息循环中直接处理:
    3. 所以 GUI 程序中通常更推荐方案1

多个子线程,读一个全局布尔变量

shared_ptr循环引用

lambda

windbg

windows调试工具

CoCreateInstance实现

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2026-07-28
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享