C++编程经验(10):无锁编程其实没那么玄乎
2023-09-14 09:15:26 时间
曾经有个人,问我对无锁队列的实现是怎么想的。我想了一会儿,还是纳闷儿,无锁,也能做消息队列吗?然后他让我回去好好查查。没错,他就是面试官。
atomic
在有些场景里面,是需要对一些资源进行锁定的。但是有些资源实在是太小了,锁定的粒度也太小了,不免显得上锁解锁倒成了繁琐。
比方说:
_mlock.lock();
count++;
_mlock.unlock();
CAS,是基于硬件层面的无锁操作,由CPU来保证。
演示
#include<iostream>
#include<memory>
#include<thread>
#include<atomic> //其中包含很多原子操作
#include<vector>
using namespace std;
volatile atomic_bool isReady = false; //volatile:防止共享变量被缓存,导致线程跑来跑去
volatile atomic_int mycount = 0;
void task() {
while (!isReady) {
this_thread::yield(); //出让时间片,等待下一次调用
}
for (int i = 0; i < 100; i++) {
mycount++;
}
}
int main() {
vector<thread> tvec;
for (int i = 0; i < 10;i++) {
tvec.push_back(thread(task));
}
this_thread::sleep_for(chrono::seconds(3));
isReady = true;
for (thread& t : tvec) {
t.join();
}
cout << mycount << endl;
return 0;
}
相关文章
- EasyC++47,全局变量
- C++无锁编程资料,无锁队列等
- C++ Socket编程实例解析[通俗易懂]
- 深入理解C++11_c++ string char
- C++提高编程笔记合集
- 【vscode】配置c++环境
- C++stl库_c++库
- c++ 时间类型详解(time_t和tm)
- 一道C++题{字符串处理}
- c++的链表-C++实现简单链表
- C++提高编程笔记合集
- Python与C++、Java区别对比学习
- C++多态
- C++11(右值引用)
- C++ 并发编程,std::unique_lock与std::lock_guard区别示例详解编程语言
- C++并发编程 条件变量 condition_variable,线程安全队列示例详解编程语言
- C++11多线程编程详解
- C++运算符重载的两种方法
- C++多文件编程是什么
- C++命名空间在多文件编程中的具体用法
- 使用VC编程连接MySQL数据库(vc++ mysql)
- 养成良好的C++编程习惯之内存管理的应用详解
- C++中CSimpleList的实现与测试实例
- C++实现二维图形的傅里叶变换