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

网友投稿 1008 2022-05-30

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

@[toc]

曾经有个人,问我对无锁队列的实现是怎么想的。我想了一会儿,还是纳闷儿,无锁,也能做消息队列吗?然后他让我回去好好查查。没错,他就是面试官

atomic

在有些场景里面,是需要对一些资源进行锁定的。但是有些资源实在是太小了,锁定的粒度也太小了,不免显得上锁解锁倒成了繁琐。

比方说:

_mlock.lock(); count++; _mlock.unlock();

CAS,是基于硬件层面的无锁操作,由CPU来保证。

演示

#include #include #include #include //其中包含很多原子操作 #include 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 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++

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为中国生态大会2021即将举行,GaussDB精彩内容抢先知
下一篇:tableau必知必会之设置 用户筛选器 分角色查看数据
相关文章