本文主要是介绍C++编程经验(10):无锁编程其实没那么玄乎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- atomic
- 演示
曾经有个人,问我对无锁队列的实现是怎么想的。我想了一会儿,还是纳闷儿,无锁,也能做消息队列吗?然后他让我回去好好查查。没错,他就是面试官。
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;
}
这篇关于C++编程经验(10):无锁编程其实没那么玄乎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!