前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++编程经验(10):无锁编程其实没那么玄乎

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

作者头像
看、未来
发布2021-10-09 15:30:24
2740
发布2021-10-09 15:30:24
举报
请添加图片描述
请添加图片描述

文章目录

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

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;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-08-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • atomic
  • 演示
相关产品与服务
消息队列
腾讯云消息队列 TDMQ 是分布式架构中的重要组件,提供异步通信的基础能力,通过应用解耦降低系统复杂度,提升系统可用性和可扩展性。TDMQ 产品系列提供丰富的产品形态,包含 CKafka、RocketMQ、RabbitMQ、Pulsar、CMQ 五大产品,覆盖在线和离线场景,满足金融、互联网、教育、物流、能源等不同行业和场景的需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档