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;
    }
  • 相关阅读:
    9、二叉排序树的创建、插入、遍历
    8、判断两个链表是否相交
    7、判断链表是否有环
    6、查找单链表中倒数第n个节点
    5、单链表的反转
    4、KMP(看毛片)算法
    3、希尔排序
    2、快速排序
    json字符串转为json对象
    json对象转化为字符串过程分析
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/11666059.html
Copyright © 2011-2022 走看看