linux无锁化的实例详解
发布时间 - 2017-07-03 00:00:00 点击率:次linux支持的哪些操作是具有原子特性的?知道这些东西是理解和设计无锁化编程算法的基础。
下面的东西整理自网络。先感谢大家的分享!
sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文。Multithreaded simple data type access and atomic variables
sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数,sync_fetch_and_add,顾名思义,先fetch,然后自加,返回的是自加以前的值。以count = 4为例,调用sync_fetch_and_add(&count,1),之后,返回值是4,然后,count变成了5.
有sync_fetch_and_add,自然也就有sync_add_and_fetch,呵呵这个的意思就很清楚了,先自加,在返回。他们哥俩的关系与i++和++i的关系是一样的。被谭浩强他老人家收过保护费的都会清楚了。
有了这个宝贝函数,我们就有新的解决办法了。对于多线程对全局变量进行自加,我们就再也不用理线程锁了。下面这行代码,和上面被pthread_mutex保护的那行代码作用是一样的,而且也是线程安全的。
sync_fetch_and_add( &global_int, 1 );
下面是这群函数的全家福,大家看名字就知道是这些函数是干啥的了。
在用gcc编译的时候要加上选项 -march=i686
// sam:在我的服务器上,发现不加都可以。 type sync_fetch_and_add (type *ptr, type value);type sync_fetch_and_sub (type *ptr, type value);type sync_fetch_and_or (type *ptr, type value);type sync_fetch_and_and (type *ptr, type value);type sync_fetch_and_xor (type *ptr, type value);type sync_fetch_and_nand (type *ptr, type value);type sync_add_and_fetch (type *ptr, type value);type sync_sub_and_fetch (type *ptr, type value);type sync_or_and_fetch (type *ptr, type value);type sync_and_and_fetch (type *ptr, type value);type sync_xor_and_fetch (type *ptr, type value);type sync_nand_and_fetch (type *ptr, type value);
// sam:很纳闷为什么后边要写省略号,是不是还有不需要我们关心的参数?用的时候不需要传参数?下面这两个函数正是哥想要的啦,可以轻松实现互斥锁的功能。
bool sync_bool_compare_and_swap (type*ptr, type oldval, type newval, ...)
type sync_val_compare_and_swap (type *ptr, type oldval, type newval, ...)
这两个函数提供原子的比较和交换,如果*ptr == oldval,就将newval写入*ptr,
第一个函数在相等并写入的情况下返回true.
第二个函数在返回操作之前的值。
sync_synchronize (...)
理解上面这个东西,参照:blog.sunchangming.com/post/47188394133
还有两个函数:
type sync_lock_test_and_set (type *ptr, type value, ...)
将*ptr设为value并返回*ptr操作之前的值。
void sync_lock_release (type *ptr, ...)
将*ptr置0
# linux
# 就有
# 不需要
# 这两个
# 的是
# 第一个
# 最好的
# 是一样的
# 设为
# 去看
# 第二个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速使用云服务器搭建个人网站?
Laravel如何处理表单验证?(Requests代码示例)
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
iOS验证手机号的正则表达式
太平洋网站制作公司,网络用语太平洋是什么意思?
phpredis提高消息队列的实时性方法(推荐)
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
Windows Hello人脸识别突然无法使用
如何在云主机上快速搭建网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
深入理解Android中的xmlns:tools属性
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
昵图网官网入口 昵图网素材平台官方入口
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Laravel怎么判断请求类型_Laravel Request isMethod用法
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel怎么使用artisan命令缓存配置和视图
Internet Explorer官网直接进入 IE浏览器在线体验版网址
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
如何在景安服务器上快速搭建个人网站?
如何在阿里云香港服务器快速搭建网站?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
深圳网站制作培训,深圳哪些招聘网站比较好?
北京专业网站制作设计师招聘,北京白云观官方网站?
Bootstrap整体框架之JavaScript插件架构
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
Python文本处理实践_日志清洗解析【指导】
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
大型企业网站制作流程,做网站需要注册公司吗?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
C++时间戳转换成日期时间的步骤和示例代码
EditPlus中的正则表达式 实战(4)
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
如何快速搭建高效WAP手机网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
如何在建站宝盒中设置产品搜索功能?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成


e sync_or_and_fetch (type *ptr, type value);type sync_and_and_fetch (type *ptr, type value);type sync_xor_and_fetch (type *ptr, type value);type sync_nand_and_fetch (type *ptr, type value);