zoukankan      html  css  js  c++  java
  • linux 无锁化编程

    摘录博客:

    https://blog.csdn.net/hzhsan/article/details/25124901

    内容如下:

    1.__sync_fetch_and_add 函数系列

    __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 );

    2. 列举该函数系列

    大家看名字就知道是这些函数是干啥的了。

    在用gcc编译的时候要加上选项 -march=i686
    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);

    3. 这两个函数提供原子的比较和交换,如果*ptr == oldval,就将newval写入*ptr

    bool __sync_bool_compare_and_swap (type*ptr, type oldval, type newval, ...)  该函数在相等并写入的情况下返回true.

    type __sync_val_compare_and_swap (type *ptr, type oldval,  type newval, ...)  该函数判断前两个参数,如果相等,就赋新值。并返回操作之前的值。 

    4.      

    type __sync_lock_test_and_set (type *ptr, type value, ...)  将*ptr设为value并返回*ptr操作之前的值。   

    void __sync_lock_release (type *ptr, ...)     将*ptr置0

    更详细的学习文章:

    https://www.cnblogs.com/silentNight/p/5685629.html

  • 相关阅读:
    今天VSS 了一把
    中文字母检索
    当心! 您也可能犯得js错 eval()不等于eval("")!
    腾讯微博邀请码2010年6月9日11:14:28
    存储过程原理
    腾讯微博邀请码2010年5月25日16:44:24
    《QQ我的好友想到的信息架构》
    8小时之外(Beyond the 8 Hours)
    超搞笑漫画比喻!如果浏览器是出行工具
    Nginx环境下配置PHP使用的SSL认证(https)
  • 原文地址:https://www.cnblogs.com/jyfyonghu/p/11141602.html
Copyright © 2011-2022 走看看