线程锁

作者: 向小暖_he | 来源:发表于2019-03-24 12:39 被阅读0次

    1.常见的锁包括:互斥锁,自旋锁。

    2.互斥锁是指锁的类型,自旋锁是指锁的实现方式。

    3.互斥锁:当上一个线程的任务没有执行完时(被锁住),那么下一个线程会进入休眠状态,等待任务执行完毕,只有上一个任务执行完,下一个线程才会唤醒执行任务。

    4.自旋锁:当上一个线程的任务没执行完时(被锁住),下一个线程始终等待,循环访问是否执行完成。效率高,但是耗CPU,并且可能死锁。

        典型的问题 OSSpinLock:不同优先级线程调度会有优先级反转问题。当资源被低优先级线程锁住,高优先级线程无法访问,但低优先级任务无法与高优先级竞争,导致低优先级任务无法完成,锁不能释放,造成死锁。

    5.自旋锁是一种特殊的互斥锁,当资源被加锁后,其他线程想要再次加锁,此时该线程不会被阻塞睡眠,而是进入循环等待状态(不能做其他事情)。循环检查资源持有者是否释放了资源,这样做的好处是减少了唤醒线程造成的资源消耗,但一直占用CPU。适用于资源占用时间段,又不希望消耗资源唤醒线程的场景。

    6.atomic的分析:

    atomic的本质是在setter和getter方法内部使用@sychronized加锁来确保原子操作。@sychronized不能保证线程安全,性能最低,因为内部做了exception handle。(异常处理)。

    不能保证线程安全,比如线程A访问getter方法,B和C访问setter方法。A线程得到的结果可能有三种:未修改的,B改过的,C改过的。

相关文章

  • 4.0.6.守护线程,线程死锁

    守护线程会随着主线程的结束而结束DaemonThread 线程 1, 线程 2,锁1,锁2 线程1 有锁1,想拿锁...

  • 悲观锁:一个线程得到锁,其它线程挂起,synchronized 乐观锁:一个线程得到锁,其它线程不断重试, cas...

  • sleep,wait, join yield

    锁池:所有需要竞争同步锁的线程都会放在锁池中,当一个线程得到锁后,其他线程都会在锁池中等待,当线程释放锁之后,其他...

  • 并发编程-线程

    线程 GIL 守护线程 线程锁(互斥锁 and 递归锁) 信号量 事件 条件 定时器 1.线程: 特点在多线程的操...

  • 深入理解AQS(二)- 共享模式

    共享锁与独占锁 独占锁被某个线程持有时,其他线程只能等待当前线程释放后才能去竞争锁,而且只有一个线程能竞争锁成功。...

  • iOS中各种锁的性能对比

    自旋锁 与 互斥锁 自旋锁 (spin lock): 如果一个线程需要获取自旋锁,该锁已经被其他线程占用,该线程不...

  • 死锁

    什么是死锁 简单的说:线程1持有A锁,线程2持有B锁;线程1尝试获取B锁,线程2尝试获取A锁。两个线程各持有了一把...

  • 公平锁和非公平锁-ReentrantLock是如何实现公平、非公

    1、什么是公平锁与非公平锁 公平锁:公平锁就是保障了多线程下各线程获取锁的顺序,先到的线程优先获取锁。非公平锁:非...

  • 2020-03-11 公平锁与非公平锁

    补: 公平锁:多个线程情况下排队,先到先获得锁 非公平锁:当锁被释放后,所有线程竞争锁,抢到的线程就会获得锁 非公...

  • LINUX线程

    创建线程 启动线程 线程锁

网友评论

      本文标题:线程锁

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