zoukankan      html  css  js  c++  java
  • Sword C语言原子操作

    /* gcc内置原子操作 */
    #include <stdio.h>
    
    /*
    知识补充:
        gcc 4.1.2版本之后,对X86或X86_64支持内置原子操作。即不需要引入第三方库(如pthread)的锁保护
        ,即可对1、2、4、8字节的数值或指针类型,进行原子加/减/与/或/异或等操作
    
    
        原子操作的本质目的是:再多线程场景下,不加锁的前提下,安全的实现对数值类型进行 加/减/与/或/异 操作
    
        API
    
        type __sync_fetch_and_add (type *ptr, type value, ...)  //将value加到*ptr上,结果更新到*ptr,并返回操作之前*ptr的值
    
        type __sync_fetch_and_sub (type *ptr, type value, ...)  // 从*ptr减去value,结果更新到*ptr,并返回操作之前*ptr的值
    
        type __sync_fetch_and_or (type *ptr, type value, ...)  // 将*ptr与value相或,结果更新到*ptr, 并返回操作之前*ptr的值
    
        type __sync_fetch_and_and (type *ptr, type value, ...)  // 将*ptr与value相与,结果更新到*ptr,并返回操作之前*ptr的值
    
        type __sync_fetch_and_xor (type *ptr, type value, ...)  // 将*ptr与value异或,结果更新到*ptr,并返回操作之前*ptr的值
    
        type __sync_fetch_and_nand (type *ptr, type value, ...)  // 将*ptr取反后,与value相与,结果更新到*ptr,并返回操作之前*ptr的值
    
        type __sync_add_and_fetch (type *ptr, type value, ...)  // 将value加到*ptr上,结果更新到*ptr,并返回操作之后新*ptr的值
    
        type __sync_sub_and_fetch (type *ptr, type value, ...)  // 从*ptr减去value,结果更新到*ptr,并返回操作之后新*ptr的值
    
        type __sync_or_and_fetch (type *ptr, type value, ...)  // 将*ptr与value相或, 结果更新到*ptr,并返回操作之后新*ptr的值
    
        type __sync_and_and_fetch (type *ptr, type value, ...)  // 将*ptr与value相与,结果更新到*ptr,并返回操作之后新*ptr的值
    
        type __sync_xor_and_fetch (type *ptr, type value, ...)  // 将*ptr与value异或,结果更新到*ptr,并返回操作之后新*ptr的值
    
        type __sync_nand_and_fetch (type *ptr, type value, ...)  // 将*ptr取反后,与value相与,结果更新到*ptr,并返回操作之后新*ptr的值
    
        bool __sync_bool_compare_and_swap (type *ptr, type oldval type newval, ...)  // 比较*ptr与oldval的值,如果两者相等,则将newval更新到*ptr并返回true
    
        type __sync_val_compare_and_swap (type *ptr, type oldval type newval, ...)  // 比较*ptr与oldval的值,如果两者相等,则将newval更新到*ptr并返回操作之前*ptr的值
    
        __sync_synchronize (...)  // 发出完整内存栅栏
    
        type __sync_lock_test_and_set (type *ptr, type value, ...)  // 将value写入*ptr,对*ptr加锁,并返回操作之前*ptr的值。即,try spinlock语义
    
        void __sync_lock_release (type *ptr, ...)  // 将0写入到*ptr,并对*ptr解锁。即,unlock spinlock语义
    
    */
    
    int main()
    {
        return 0;
    }
  • 相关阅读:
    mq/mysql/redis/nginx常见服务&工具安装
    中断——中断描述符表的定义和初始化(二) (基于3.16-rc4)
    中断——中断描述符表的定义和初始化(一) (基于3.16-rc4)
    linux内核中与进程相关的数据结构(基于linux3.16-rc4)
    内核链表的应用
    ubuntu下做柯老师lab19-lab20实验问题总结
    在ns2.35中添加myevalvid框架
    在ns2.35下完成柯老师lab18实验
    windows编程socket问题
    如何高效利用GitHub
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/11666059.html
Copyright © 2011-2022 走看看