linux cas 钥匙生成,gcc linux利用CAS实现无锁编程

利用__sync_bool_compare_and_swap(),实现无锁编程

CAS即compare and swap,每次都会和old 值进行比较,如果没有发生更改再用new值给ptr赋值,然后返回true

#include

#include

#include

#include

#ifdef __GNUC__

//#define ATOMIC

#define CAS

#define _ATOMIC_ADD_(x, y) __sync_fetch_and_add(x, y)

#define _ATOMIC_SUB_(x, y) __sync_fetch_and_sub(x, y)

#define _CAS_(ptr, old, new) __sync_bool_compare_and_swap(ptr, old, new)

#else

#define _ATOMIC_ADD_(x, y) ;

#define _ATOMIC_SUB_(x, y) ;

#define _CAS_(ptr, old, new) ;

#endif

int val = 0;

void* worker1(void* arg)

{

#ifdef ATOMIC

for (int i = 0; i < 50000; i++)

_ATOMIC_ADD_(&val, 1);

#endif

#ifdef CAS

int old = val;

int i = 0;

for (; i < 10000; i++) {

while (!_CAS_(&val, old, old + 1)) {

old = val;

}

}

printf("%d", i);

#endif

}

void* worker2(void* arg)

{

#ifdef ATOMIC

for (int i = 0; i < 50000; i++)

_ATOMIC_SUB_(&val, 1);

#endif

#ifdef CAS

int i = 0;

int old = val;

for (; i < 10000; i++) {

while (!_CAS_(&val, old, old - 1)) {

old = val;

}

}

printf("%d", i);

#endif

}

int main()

{

pthread_t tid[2];

pthread_create(&tid[0], NULL, worker1, NULL);

pthread_create(&tid[1], NULL, worker2, NULL);

pthread_join(tid[0], NULL);

pthread_join(tid[1], NULL);

std::cout << val << std::endl;

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

载波和LoRa

最近lora这个很火&#xff0c;火的原因是因为国家出了一个政策&#xff0c;这个政策呢&#xff0c;有很多人解读了&#xff0c;我身边也有好几个朋友做这方面的&#xff0c;然后我今天找他们聊了下&#xff0c;得到的结果是&#xff0c;这个政策肯定是或多或少对现在的行情和市…

imread函数 matlab_【MATLAB图像处理学习】1.读取和显示图片

CHAPTER2 图像处理的基础函数【使用的教材&#xff1a;冈萨雷斯 数字图像处理MATLAB(Digital image processing with Matlab】【原书图片下载地址&#xff1a;点这里】先介绍三个MATLAB中图片基本操作&#xff1a;imread imshow imwrite2.2读取图片imread(filename)imread是读取…

一场不能只看结果的较量

林书豪的比赛看得真的很舒服&#xff0c;虽然输掉了比赛&#xff0c;但是看到两边不断改变打法&#xff0c;不断试图侵犯对方的夺取分数&#xff0c;就好比看了一场战争电影&#xff0c;过程酣畅淋漓&#xff0c;结果差点令人满意。第一节广东的双后卫给北京制造了非常多的麻烦…

log4js linux,日志管理 log4js

版本&#xff1a;express&#xff1a;"~4.13.4"log4js&#xff1a;"^0.6.38"安装npm install log4js封装 log4js&#xff1a;在项目根目录下新建文件 logger.js&#xff1a;var log4js require(log4js);log4js.configure({appenders: [{type: console // …

嘻哈帝国第一季/全集Empire迅雷下载

英文译名Empire&#xff0c;第1季(2015-01-08)FOX.本季看点&#xff1a;《嘻哈帝国》卢西奥斯莱恩是一名超级音乐明星兼Empire娱乐公司的创始人&#xff0c;故事讲述了他如何在困境和失败中运营公司的故事。拥有庞大帝国的老板得了绝症&#xff0c;于是他决定培养继承人&#x…

cassandra可视化工具_一位数据科学家的私房工具清单

作为一位万人敬仰的数据科学家&#xff0c;不但需要培育一棵参天技能树&#xff0c;私人武器库里没有一票玩得转的大火力工具也是没法在江湖中呼风唤雨的。近日北卡来罗纳大学CTO&#xff0c;一位数据科学家Jefferson Heard分享了多年来收集沉淀的数据分析工具集&#xff1a;处…

Dev C++,一个好玩的猜数字游戏

周末了&#xff0c;看了一点代码&#xff0c;发现有一个好玩的数字游戏&#xff0c;贡献给大家&#xff0c;个人觉得还是挺好玩的。说个题外话&#xff0c;之前写的文章&#xff0c;都是零散的&#xff0c;主要是时间的原因&#xff0c;最近事情有点杂&#xff0c;一说到这个事…

[BZOJ 2500] 幸福的道路

照例先贴题面&#xff08;汪汪汪&#xff09; 2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 368 Solved: 145[Submit][Status][Discuss]Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一…

c语言如何赋值星期到字母,C语言程序设计课程教案.doc

C语言程序设计课程教案《C语言程序设计》课程教案课题C语言概述课型新授课授课日期课时2教学目的1、了解C语言的特点&#xff1b;2、掌握C简单程序的结构&#xff1b;3、熟练掌握C程序的编辑、编译、链接和运行的过程。教学重点难点教学重点&#xff1a;C语言的特点与编程环境教…

python高并发架构_python高并发的解决方案

一.cdn加速 简单说就是把静态资源放到别人服务器上 全称:Content Delivery Network或Content Ddistribute Network&#xff0c;即内容分发网络 基本思路&#xff1a; 尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输的更快、更稳定。通过…

你手上的PCB怎么制作的?几张动图揭晓工厂生产流程

在PCB出现之前&#xff0c;电路是通过点到点的接线组成的。这种方法的可靠性很低&#xff0c;因为随着电路的老化&#xff0c;线路的破裂会导致线路节点的断路或者短路。绕线技术是电路技术的一个重大进步&#xff0c;这种方法通过将小口径线材绕在连接点的柱子上&#xff0c;提…

ANR

出现类型&#xff1a; 1、按键或触摸事件在规定事件内未响应。 2、BroadcastReceiver在特定时间内未完成处理。 3、小概率service在特定时间内为完成处理。 常见的超时引发的ANR Activity: onCreate(), onResume(), onDestroy(), onKeyDown(), onClick()等&#xff0c;超时时间…

linux开发板作为蓝牙音箱,USB 蓝牙适配器在ARM 开发板下的使用

4、可能出现的问题和解决方案&#xff1a;4.1 编译dbus 时出现&#xff1a;1checking for accept4... yeschecking abstract socket namespace... nochecking for pkg-config... (cached) /usr/local/bin/pkg-configchecking pkg-config is at least version 0.9.0... yescheck…

细丝极恐的华为251事件

事情的来龙去脉我就不再详细描述了&#xff0c;我提几个问题点&#xff0c;觉得有点疑惑&#xff0c;也是自己对这个事件的看法。1、李洪元于2005年入职华为&#xff0c;2018年1月离职&#xff0c;在2016年11月21日向公司的投诉邮箱发了一份匿名邮件&#xff0c;至于发邮件的东…

mysql set语句_mysql--乱码解决(6)

1.字符集介绍mysql数据库字符集包括字符集(character)和校对规则(collation)两个概念&#xff0c;其中字符集是用来定义mysql数据字符串的存储方式&#xff0c;而校对规则则是定义比较字符串的方式。2.常见字符集3.解决中文乱码思想&#xff1a;保持linux、服务端、库、表、客户…

Android WebView常见问题及解决方案汇总【很全很实用】

http://www.cnblogs.com/olartan/p/5713013.html转载于:https://www.cnblogs.com/genggeng/p/7196484.html

c语言中字符 12是多少,c语言中字符串的讲解(DOC可编).doc

c语言中字符串的讲解(DOC可编).doc第一部分:字符串的概念---字符串:用双引号引起来的一串字符。在C语言&#xff0c;系统将自动的为字符串添加一个结束标志\0 ,该结束标志不作为字符串的实际长度&#xff0c;但作为结束标志在内存中占有1个字节的存储空间。例如: "abc&quo…

C 语言,你真的懂递归了吗?

什么是递归&#xff1f;要说到递归如果不说栈的话&#xff0c;我觉得有点不合适&#xff0c;递归特点就是不断的调用同一个函数&#xff0c;如果这个函数没有一个递归界限&#xff0c;那么就是死循环了&#xff0c;所以讨论递归&#xff0c;就必须要讨论递归的界限&#xff0c;…

github page hexo博客gitee_利用Github和hexo搭建个人免费博客

利用Github和hexo搭建个人免费博客详细过程&#xff1a;概述&#xff1a;详细的介绍了利用github和hexo搭建免费的博客&#xff0c;内容详细&#xff0c;浅显易懂&#xff0c;容易上手&#xff0c;大家一起进来看看吧&#xff01;1、配置Github相关操作&#xff1a;​ ①新建一…

CURL常用命令

地址 http://www.cnblogs.com/gbyukg/p/3326825.html 转载于:https://www.cnblogs.com/jason886/p/7198825.html