Fluid
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于

spinlock内部一定要使用内存屏障技术

内存屏障总结 应用开发用到的锁/信号量等粗粒度同步机制的内部实现 肯定会用到内存屏障 例如自旋锁 -> 需要结合一个具体的实现仔细看一下 都在自己的缓存中,lock_val = 0 core 0 尝试获取,将lock_val的值写为1。接着执行关键代码 底层MESI协议开始起作用 但是有一定延迟 接着,core 1尝试获取,发现自己缓存中lock_val的值仍然为0,
2024-08-27
嵌入式-开发
#内存屏障

同步 vs 内存屏障

2024-08-27
嵌入式-开发

CPU乱序执行-内存屏障

参考博客 HPC(高性能计算第一篇):一文彻底搞懂并发编程与内存屏障(完结篇) 为什么CPU会乱序执行 前后两条指令没有依赖;但是前一条指令访存地址不在L1 cache中,而后一条指令的访存地址在L1 cache中,因此可以先执行第二条指令,等待第一条指令将访存单元加载到L1 cache中再执行第1条指令。有些CPU是这样做的 但是==X64==架构保证写
2024-08-27

Linux - 开发可以的debug手段

一次真实的内存泄漏检测参考链接 Linux如何查找内存泄露和内存占用过大? 观察步骤 pidstat观察某个进程的内存使用统计【随时间变化】 还可以观察io/cpu/上下文切换等信息 pmap -x <pid>显示程序的虚拟内存分布及虚拟内存映射情况,得到泄漏内存大小约为4K 查到可能是由于malloc或mmap系统调用分配内存导致的 使用strace跟踪系统
2024-08-26
嵌入式-开发

2024-08-26

cpp异常

C++编译器,在编译除法操作时,没有为它加上额外的检查代码以抛出一个异常;也没有要求处理不同OS之间对(已经发生的)除0错的处理。
2024-08-26
cpp基础

Linux - 系统调度点

2024-08-26
操作系统
#Linux

构造函数-析构函数的调用时机 VS 异常

一般地 这两个函数==由编译器保证调用== 构造函数在创建对象时调用 析构函数在对象离开作用域时调用 即使在作用域内发生异常(throw),对象的析构函数仍然能确保调用 RAII思想的重要基础 CPP异常机制 try -> throw() -> catch() 开发人员可以手动使用throw来触发异常 某些std库函数也具有throw异
2024-08-25
cpp基础

回溯法

常用剪枝技巧经典题目 698. 划分为k个相等的子集 思路 共有k个桶 每个球都要选择划分到哪一个桶,并进行回溯 重要剪枝:如果当前桶与上一个桶的和相同,则跳过当前桶
2024-08-25
刷题记录

记忆化搜索

常见的记忆化key方案常用技巧 得先想出递归的完整方案 将递归的参数引入记忆化搜索中 记忆化搜索key压缩技术 经典题目 3154. 到达第 K 级台阶的方案数 想到了递归方案 -> 但是边界条件的处理不适合转化为记忆化 想到的递归没有带返回值 但是没有想出如何进行递归化搜索 边界条件处理的逻辑 还是子问题的逻辑没有想好 3144. 分割字符频率相等的最少子字符串 记忆化递归的
2024-08-22
刷题记录
1…56789…13

搜索

Hexo Fluid