自旋锁 订阅
自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。 展开全文
自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在标志寄存器中关闭/打开中断标志位,不需要自旋锁)。
信息
外文名
Spin lock
概    念
保护共享资源
中文名
自旋锁
初    衷
在短期间内进行轻量级的锁定
自旋锁概念
何谓自旋锁?它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。
收起全文
精华内容
下载资源
问答
  • 自旋锁

    2020-08-06 18:05:51
    自旋锁自旋锁简介代码实现自旋锁juc中自旋锁源码 自旋锁简介 是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU 代码实现自旋锁 ...

    自旋锁简介

    • 是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU

    代码实现自旋锁

    public class SpinLock {
    
        //原子引用线程
        AtomicReference<Thread> atomicReference = new AtomicReference<Thread>();
    
        public static void main(String[] args) {
    
            SpinLock spinLock = new SpinLock();
    
            new Thread(() -> {
                spinLock.mylock();
                try {
                    TimeUnit.SECONDS.sleep(5);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                spinLock.myUnlock();
            },"AAA").start();
    
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            new Thread(() -> {
                spinLock.mylock();
                spinLock.myUnlock();
            },"BBB").start();
    
    
    
        }
    
        public void mylock(){
    
            Thread thread = Thread.currentThread();
            System.out.println(Thread.currentThread().getName()+"\t come in ");
    
            while (!atomicReference.compareAndSet(null,thread)){
                //System.out.println("在等待: "+Thread.currentThread().getName());
            };
        }
    
        public void myUnlock(){
            Thread thread = Thread.currentThread();
            atomicReference.compareAndSet(thread,null);
            System.out.println(Thread.currentThread().getName()+"\t come out");
        }
    
    }
    
    

    juc中自旋锁源码

    atomicInteger.incrementAndGet();
    
    public final int incrementAndGet() {
            return unsafe.getAndAddInt(this, valueOffset, 1) + 1;
        }
    
    public final int getAndAddInt(Object var1, long var2, int var4) {
            int var5;
            do {
                var5 = this.getIntVolatile(var1, var2);
            } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
    
            return var5;
        }
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,094
精华内容 3,237
关键字:

自旋锁