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无锁化的实例详解的详细内容,更多请关注其它相关文章!
上一篇: PHP 存取 MySQL 数据库的一个例子_PHP教程
下一篇: linux下安装QT5:error: unrecognized command line option ‘-fuse-ld=gold’
推荐阅读
-
java 使用DecimalFormat进行数字的格式化实例详解
-
Python彩色化Linux的命令行终端界面的代码实例分享
-
Spring实例化bean的方式代码详解
-
Python彩色化Linux的命令行终端界面的代码实例分享
-
java 序列化与反序列化的实例详解
-
python基于mysql实现的简单队列以及跨进程锁实例详解
-
Linux chmod命令详解和使用实例(改变文件或目录的访问权限)
-
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
-
linux top命令详解和使用实例及使用技巧(监控linux的系统状况)
-
python的格式化输出(format,%)实例详解