首页 > 其他分享 >自旋锁

自旋锁

时间:2023-12-12 22:36:30浏览次数:26  
标签:旋锁 保持者 获取 CAS 互斥 线程 自旋

⾃旋锁(spinlock):是指当⼀个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。

⾃旋锁与互斥锁⽐较类似,它们都是为了解决对某项资源的互斥使⽤。⽆论是互斥锁,还是⾃旋锁,在任何时刻,最多只能有⼀个保持者,也就说,在任何时刻最多只能有⼀个执⾏单元获得锁。

对于互斥锁,会让没有得到锁资源的线程进⼊BLOCKED状态,⽽后在争夺到锁资源后恢复为RUNNABLE状态,这个过程中涉及到操作系统⽤户模式和内核模式的转换,代价⽐较⾼。但是⾃旋锁不会引起调⽤者堵塞,如果⾃旋锁已经被别的执⾏单元保持,调⽤者就⼀直循环在那⾥看是否该⾃旋锁的保持者已经释放了锁。

⾃旋锁的实现基础是CAS算法机制。CAS⾃旋锁属于乐观锁,乐观地认为程序中的并发情况不那么严重,所以让线程不断去尝试更新。

标签:旋锁,保持者,获取,CAS,互斥,线程,自旋
From: https://www.cnblogs.com/lin513/p/17897989.html

相关文章

  • 硬件自旋锁框架 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/hwspinlock.html硬件自旋锁框架简介硬件自旋锁模块为异构处理器和不在单一共享操作系统下运行的处理器之间的同步和互斥提供硬件辅助。例如,OMAP4具有双核Cortex-A9、双核Cortex-M3和一个C64x+DSP,每个处理器运行不同的操作系......
  • CAS自旋锁到底是什么?为什么能实现线程安全?
    ......
  • 自旋锁探秘
    spinlock和mutexSpinlock是linux内核中常用的一种互斥锁机制,和mutex不同,当无法持锁进入临界区的时候,当前执行线索不会阻塞,而是不断的自旋等待该锁释放。正因为如此,自旋锁也是可以用在中断上下文的。也正是因为自旋,临界区的代码要求尽量的精简,否则在高竞争场景下会浪费宝贵的CPU......
  • 使用 C++11 原子类型 `std::atomic_flag` 实现的自旋锁
    使用C++11原子类型std::atomic_flag实现的自旋锁:#include<atomic>classSpinlock{public:Spinlock():flag(ATOMIC_FLAG_INIT){}voidlock(){while(flag.test_and_set(std::memory_order_acquire));}voidunlock(){flag.cl......
  • linux --- 自旋锁(spinlock_t)
    定义自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名。由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于......
  • 如何使用C++11原子操作实现自旋锁
    什么是自旋锁?C++自旋锁是一种低层次的同步原语,用于保护共享资源的访问。自旋锁是一种轻量级的锁,适用于短时间的资源锁定。自旋锁的特点:当一个线程尝试获取已经被另一个线程占有的自旋锁时,这个线程会进入一个循环(自旋),在这个循环中它不断地检查锁是否已经被释放。如果锁已经被释放,那......
  • golang简单实现CLHLock,不可重入的clh自旋锁
    如果不想自旋,可以把Lock、waitIsFinish和noticeIsFinish代码中的方式2注释掉,改用方式1。不过实际测试在低并发的情况下,自旋的执行效率更高,要根据实际业务场景选择使用哪种方式。源代码如下:import("runtime""sync/atomic")const(Gosched_Spin_Count=10000......
  • 自旋锁的简单实现
    实现自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。自旋锁是互斥锁的一种实现,Java实现如下方所示。publicclassSpinLock{privateAtomicReference<Thread>o......
  • 轨道角动量 OAM 超表面 自旋-轨道角动量耦合结构设计 fdtd仿真 文
    轨道角动量OAM超表面自旋-轨道角动量耦合结构设计fdtd仿真文献:2017OE:Spin-to-orbitalangularmomentumconversionindieletricmetasurface介绍:自旋-轨道角动量转换超表面,入射自旋角动量光束,即左右旋圆偏振光时,经过介质超表面的调制,出射光为交叉偏振态的涡旋光束,携带轨道......
  • 基于CAS实现自旋锁
    #include<aomic>classSpinLock{public:SpinLock():flag_(false){}voidlock(){boolexcept=false;while(!flag_.compare_exchange_weak(expect,true)){expect=false;}}voidunlock(){flag_.store......