C++编程经验(10):无锁编程其实没那么玄乎

阅读: 评论:0

C++编程经验(10):无锁编程其实没那么玄乎

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;
}

本文发布于:2024-02-01 18:16:54,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170678261438544.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:玄乎   经验
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23