锁,数据同步

目录

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

原子操作

适用情况和场景

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

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

中断控制

适用情况和场景

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

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

自旋锁

适用情况和场景

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

信号量

适用情况和场景

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

小结

四种情况小结

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

相关推荐
未知陨落5 分钟前
数据结构——二叉搜索树
开发语言·数据结构·c++·二叉搜索树
一丝晨光1 小时前
gcc 1.c和g++ 1.c编译阶段有什么区别?如何知道g++编译默认会定义_GNU_SOURCE?
c语言·开发语言·c++·gnu·clang·gcc·g++
汉克老师2 小时前
GESP4级考试语法知识(贪心算法(四))
开发语言·c++·算法·贪心算法·图论·1024程序员节
姆路2 小时前
QT中使用图表之QChart绘制动态折线图
c++·qt
秋说3 小时前
【数据结构 | C++】整型关键字的平方探测法散列
数据结构·c++·算法
槿花Hibiscus6 小时前
C++基础:Pimpl设计模式的实现
c++·设计模式
黑不拉几的小白兔6 小时前
PTA部分题目C++重练
开发语言·c++·算法
写bug的小屁孩6 小时前
websocket身份验证
开发语言·网络·c++·qt·websocket·网络协议·qt6.3
chordful7 小时前
Leetcode热题100-32 最长有效括号
c++·算法·leetcode·动态规划
材料苦逼不会梦到计算机白富美7 小时前
线性DP 区间DP C++
开发语言·c++·动态规划