锁,数据同步

目录

经常遇到数据同步的问题,具体有哪些情况呢?来聊一聊。我知道的,应该有以下四种,原子操作,中断控制,自旋锁和信号量。

原子操作

适用情况和场景

原子操作经常用在单个变量,比如一个整数或者bool变量;

场景:像全局计数器,状态标志变量。

中断控制

适用情况和场景

适用情况,数据量多的时候

场景:关闭/开启中断,单核CPU

自旋锁

适用情况和场景

既然中断操作无法满足所有的情况,自然有一些新的场景,需要新的方法来实现,这就是自旋锁;它适用于多核CPU情况;具体原理呢,请看下图:

信号量

适用情况和场景

看过自旋锁,发现其实自旋锁适用于短时间还好,要是长时间等待呢,怎么搞?这就有了信号量。信号量适用长时间等待的情况,它有等待,互斥,唤醒操作。需要的时候,唤醒它,就可以用了。也挺智能的。

小结

四种情况小结

以上就是数据同步的四种情况,适用于不同的场景。原子操作,中断控制,自旋锁,信号量,用到什么,自取。

相关推荐
浪浪小洋15 小时前
c++ qt课设定制
开发语言·c++
charlie11451419116 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
handler0116 小时前
Linux: 基本指令知识点(2)
linux·服务器·c语言·c++·笔记·学习
香蕉鼠片18 小时前
MFC是什么
c++·mfc
心态与习惯18 小时前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较
NE_STOP19 小时前
Linux进阶--系统备份、恢复与可视化管理工具webmin、bt宝塔
操作系统
小欣加油19 小时前
leetcode2078 两栋颜色不同且距离最远的房子
数据结构·c++·算法·leetcode·职场和发展
我真不是小鱼19 小时前
cpp刷题打卡记录30——轮转数组 & 螺旋矩阵 & 搜索二维矩阵II
数据结构·c++·算法·leetcode
南境十里·墨染春水19 小时前
C++ 笔记 thread
java·开发语言·c++·笔记·学习
南境十里·墨染春水19 小时前
C++ 笔记 高级线程同步原语与线程池实现
java·开发语言·c++·笔记·学习