美文网首页
竞态与同步(2)

竞态与同步(2)

作者: Lmmmmbbb | 来源:发表于2017-06-06 20:23 被阅读18次

除了前面信号量、自旋锁等方法,LDD中还介绍了一写免锁算法,主要包括:
环形缓冲、原子变量、位操作、seqlock、RCU等。

  • 原子变量
    原子变量的操作通常会被编译成一条指令。
    可以对一个值原子的加减、赋值、测试等,
    原子变量只有24位长度
#include <asm/atomic.h>
//初始化
atomic_t v = ATOMIC_INIT(0);
//读取
int atomic_read(&v);
//加减
void atomic_add(int i, &v);
void atomic_sub(int i, &v);
void atomic_inc( &v);
void atomic_dec( &v);
//加减并测试,计算结束后为0则返回真
int atomic_inc_and_test( &v);
int atomic_dec_and_test( &v);
int atomic_sub_and_test(int i, &v);
int atomic_add_negative(int i, &v); //将i加到v,结果为负时返回真
//加减并返回计算后的值(转为整形)
int atomic_add_return(int i, &v);
int atomic_sub_return(int i, &v);
int atomic_inc_return(&v);
int atomic_dec_return(&v);

原子变量不能直接当作整形变量使用,应通过上面函数取出其值

相关文章

  • 竞态与同步(2)

    除了前面信号量、自旋锁等方法,LDD中还介绍了一写免锁算法,主要包括:环形缓冲、原子变量、位操作、seqlock、...

  • 竞态与同步(1)

    内核里处理的竞态主要通过以下方法处理: 信号量(互斥量)、自旋锁、读写信号量、读写自旋锁、等待队列、完成量。 信号...

  • 多线程与同步

    多线程与同步 多线程并行执行能够大大提升程序运行效率,但是也要注意随之带来的线程间同步问题,避免竞态条件(“Rac...

  • 69 netty 深度源码解读

    1,同步与异步的/阻塞与非阻塞IO概念2,linux 用户态与内核态之间的区别3, 从linux内核角度分析非阻塞...

  • 并发与竞态

    自旋锁 自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是 否该自旋锁的保持者...

  • 【链安】竞态条件漏洞分析及详细修复建议

    什么是竞态条件 【竞态条件】竞态条件的官方定义是如果程序的执行顺序改变会影响结果,它就属于一个竞态条件。在智能合约...

  • WWDC 2016 Thread Santizer and St

    一. Thread Santizer(TSAN) 线程竞态检测工具:可以在运行时发现线程竞态 竞态 两个线程同时访...

  • 五、synchronized

    多线程访问相同的共享可变的变量时,通常需要使用加锁的方式实现同步,避免竞态条件发生。同步的其中一个特征就是互斥,通...

  • 并发模型之线程与锁

    三个问题 竞态条件 死锁 内存可见性 规则 访问共享变量时需要同步 读线程和写线程都要同步化 持有锁的时间应该尽可...

  • 第二部分 进程管理 同步与死锁

    第六章 同步 竞态,竞争条件,(race condition) 是指多个进程(线程)并发访问和操作同一数据并且执行...

网友评论

      本文标题:竞态与同步(2)

      本文链接:https://www.haomeiwen.com/subject/heuwfxtx.html