• 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;
    }
  • 相关阅读:
    Django实现注册,往邮箱发送验证链接
    初来乍到
    (spring-第5回【IoC基础篇】)spring容器从加载配置文件到实例化bean的内部工作机制
    (spring-第4回【IoC基础篇】)spring基于注解的配置
    (spring-第3回【IoC基础篇】)spring的依赖注入-属性、构造函数、工厂方法等的注入(基于XML)
    (spring-第2回【IoC基础篇】)Spring的Schema,基于XML的配置
    (spring-第1回【IoC基础篇】)Spring容器中Bean的生命周期
    Python的小数据池和编码解码
    Python数据类型之字典
    Python的基本数据类型(列表,元组)
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/11666059.html
Copyright © 2020-2023  润新知