`
raojl
  • 浏览: 208853 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

atomic笔记

 
阅读更多

inline void ice_atomic_set(ice_atomic_t* v, int i)

{

    v->counter = i;

}

 

/*

 * ice_atomic_inc - increment ice_atomic variable

 * @v: pointer of type ice_atomic_t

 * 

 * Atomically increments @v by 1. Note that the guaranteed useful

 * range of an ice_atomic_t is only 24 bits.

 *

 * Inlined because this operation is performance critical.

 */

inline void ice_atomic_inc(ice_atomic_t *v)

{

    __asm__ __volatile__(

        "lock ; incl %0"

        :"=m" (v->counter)

        :"m" (v->counter));

}

 

/**

 * ice_atomic_dec_and_test - decrement and test

 * @v: pointer of type ice_atomic_t

 * 

 * Atomically decrements @v by 1 and returns true if the result is 0,

 * or false for all other cases. Note that the guaranteed useful

 * range of an ice_atomic_t is only 24 bits.

 *

 * Inlined because this operation is performance critical.

 */

inline int ice_atomic_dec_and_test(ice_atomic_t *v)

{

    unsigned char c;

    __asm__ __volatile__(

        "lock ; decl %0; sete %1"

        :"=m" (v->counter), "=qm" (c)

        :"m" (v->counter) : "memory");

    return c != 0;

}

 

/**

 * ice_atomic_exchange_add - same as InterlockedExchangeAdd. This

 * didn't come from atomic.h (the code was derived from similar code

 * in /usr/include/asm/rwsem.h)

 *

 * Inlined because this operation is performance critical.

 */

inline int ice_atomic_exchange_add(int i, ice_atomic_t* v)

{

    int tmp = i;

    __asm__ __volatile__(

        "lock ; xadd %0,(%2)"

        :"+r"(tmp), "=m"(v->counter)

        :"r"(v), "m"(v->counter)

        : "memory");

    return tmp + i;

}

分享到:
评论

相关推荐

    并发编程atomic&collections-课上笔记1

    并发编程 atomic & collections - 课上笔记1 本文主要讲述了 Java 中的并发编程,包括 atomic 包的介绍、CAS 算法的原理、ABA 问题的解决方案,以及 collections 中的 HashMap、HashTable 和 ConcurrentHashMap 的...

    Go 学习笔记 高清

    - 第19章 sync:介绍Locker、Cond、Once、WaitGroup和atomic。 - 第20章 os:包含System、Environ、Process、Signal和User。 第三部分:扩展库 - 提到了mgo(MongoDB的Go语言驱动)和RichMON(网络监控工具)。 从...

    msvcp140_atomic_wait.dll下载 找不到msvcp140_atomic_wait.dll .zip

    dll控件常规安装方法(仅供参考): 一、如果在运行某软件或编译程序时提示缺少、找不到dll等类似提示,您可将下载来的dll拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用...

    Go语言学习笔记.pdf 共174页

    在sync部分,作者讲解了Go语言中的sync库,包括Locker、Cond、Once、WaitGroup、atomic等内容。 在os部分,作者讲解了Go语言中的os库,包括System、Environ、Process、Signal、User等内容。 扩展库 在扩展库部分...

    Effective Modern C++学习笔记

    辨析std∷atomic和volatile之间的差异,它们各自该如何使用,还有它们与C++并行计算API之间的关联;如何修改老C++编程(比如C++98)中的实践,使之符合现代C++的软件开发规范。此文档是该书的读书笔记。

    尚硅谷JUC视频笔记整理,很详细和全面,帮你迅速掌握JUC

    本笔记整理涉及了JUC的内存可见性、volatile关键字以及CAS算法和原子变量等多个方面,以下是对这些知识点的详细说明。 ### 内存可见性 在多线程环境下,内存可见性是指当一个线程修改了某个共享变量的值,其他线程...

    Java并发实践-学习笔记

    2. **同步机制**:Java提供了多种同步机制来确保线程安全,如`synchronized`关键字、`volatile`关键字、`Lock`接口(如`ReentrantLock`)以及`Atomic`类。笔记会详细解释它们的工作原理和使用场景。 3. **线程通信*...

    哔哩哔哩JUC狂老师笔记.zip

    "哔哩哔哩JUC狂老师笔记.zip"中的笔记内容,显然聚焦于讲解如何有效地利用JUC库来提升并发性能和程序的正确性。下面,我们将深入探讨JUC中的关键知识点。 1. **锁机制**: - **synchronized**:Java内置的关键字,...

    尚硅谷大厂面试题第二季周阳主讲整理笔记

    - **java.util.concurrent.atomic** 提供了原子变量类,如AtomicInteger,用于无锁编程,保证单个变量的原子操作。 - **java.util.concurrent.locks** 包含锁相关的接口和实现,如ReentrantLock,提供可中断和公平锁...

    IPVS源代码阅读笔记_入门教程(负载均衡)PDF

    ### IPVS源代码阅读笔记知识点概述 #### 一、IPVS简介与背景 - **IPVS**(Internet Protocol Virtual Server)是由章文嵩博士主导的一个开源项目,它主要用于实现网络层上的负载均衡服务,最早在Linux 2.2内核以...

    \java超强笔记(超级经典)

    java.util.concurrent.atomic 包含了不用加锁情况下就能改变值的原子变量。 java.util.concurrent.locks 包含锁定的工具。 Executor接口: 替代了Thread类,他可以创建定量的、动态的以及周期性的线程池...

    Zookeeper学习资源和笔记(附代码)

    集群中的每个节点都会维护一份完整的数据副本,通过ZAB(Zookeeper Atomic Broadcast)协议实现数据的一致性。 总的来说,Zookeeper是一个强大的工具,对于理解和实践分布式系统原理有着重要作用。通过深入学习和...

    c++笔记学习心得笔记

    ### C++学习心得笔记 #### 一、C++特性与编程技巧 1. **C++对右值的支持**: - C++支持右值引用,这使得移动语义成为可能,提高了性能。C语言不支持右值引用。 2. **C++枚举体**: - 枚举体在C++中提供了更强大...

    linux c语言 笔记

    - `atomic_t f_count;`: 原子计数器,记录文件引用次数。 - `unsigned`: 其他未列出的字段,如权限标志等。 #### 五、时间函数 - **获取当前时间**: - `time_t time(time_t *t)`: 返回当前时间戳。 - `struct ...

    juc尚硅谷-自学笔记

    6. **Atomic类**:这些类提供了一种在不使用synchronized关键字的情况下实现原子操作的方法,如`AtomicInteger`、`AtomicLong`等,它们保证了在多线程环境下的数据一致性。 7. **ConcurrentHashMap**:它是线程安全...

    java并发编程实践pdf笔记

    这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...

    原子指令于Lock-Free数据结构教学笔记

    - **原子交换寄存器和内存位置(Atomic Exchange Register and Memory Location)**:通过这一指令可以在不改变其他操作的前提下交换内存和寄存器中的值。 - **比较与交换(Compare-and-Swap, CAS)**:CAS 是一种非常...

    c++ concurrency in action笔记

    6. **原子操作与内存模型**:C++11引入了原子类型`std::atomic`,它保证了在并发环境下的操作不会被其他线程打断。内存模型则规定了多线程环境下数据的可见性和顺序,理解内存模型对于编写高效且正确的并发代码至关...

    matlab 快速学习笔记.pdf

    由于您提供的【部分内容】中没有任何实际内容,我无法直接生成知识点。为满足要求,我会对MATLAB进行一个全面的快速学习知识点梳理,这些知识点覆盖了MATLAB的基本操作、编程基础、核心算法以及应用领域。...

Global site tag (gtag.js) - Google Analytics