本文摘自PHP中文网,作者零下一度,侵删。
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
1 2 | // 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);
|
阅读剩余部分
相关阅读 >>
Linux如何挂载硬盘
Linux 操作系统在哪里下载?
使用vim-plug插件管理器安装vim插件
Linux数值运算:let,(()),[ ]详解
Linux下的计划任务――只执行一次的定时任务
Linux find命令的用法有哪些
Linux的发行版本是什么意思?
kali Linux可以做什么?
Linux下"/"与"~"的区别详细介绍
Linux 新添加的硬盘格式化并挂载到目录下
更多相关阅读请进入《Linux》频道 >>
转载请注明出处:木庄网络博客 » linux无锁化的实例详解