• 锁机制


    阻塞:对于同一个共享资源,采用内置锁,如果一个线程获取的锁被另一个线程获得,则进入阻塞的状态,一直等待线程释放锁之后,不响应中断。

    重入:锁的申请针对线程,而不针对调用。内置锁是可重入的

    =====================================================================================================

    1.计算机的资源单一,基本都是多个设备共享,一方面方便管理,一方面设备通信变得比较容易。

    2.引入锁机制就是为了对共享资源进行并发访问控制,防止资源操作不一致。(锁也有资源的开销,

    使用不当,开销可能比线程的开销还要多)---开销也就是来回切换环境-----阻塞的有阻塞队列,就绪的有就绪队列以及就绪的环境变量等资源信息,所以存在资源消耗,需要CPU执行。

    锁本身也是一种共享资源,所以对它也有进行同步控制,所有锁对象采取的是状态位(voilate)进行控制的,同时锁上面有对应的队列请求,对应的入、出队操作,保证操作的安全

    synchronized与Lock在默认情况下是不会响应中断(interrupt)操作

    a.锁-时间少,使用者少(请求少),共享锁替代独占锁

    3.锁分类:

      内部锁(常见的sync关键字)--对象的监视器--自动打开,自动关闭----属于独占锁的一种。

      自旋锁:cas机制,不断的轮询,查看标志位---适合较短时间的等待,而借助操作系统的进程挂起,适合长时间等待也就是阻塞机制,到时自动唤醒

      同步锁

      可重入锁:如果一个线程持有某个管程对象上的锁,那么它就有权访问所有在该管程对象上同步的块。这就叫可重入

    4.

    ===========================================================

    cas机制:https://www.ibm.com/developerworks/cn/java/j-jtp11234/ 

    非阻塞算法:http://www.ibm.com/developerworks/cn/java/j-jtp04186/

    AQS机制:http://www.blogjava.net/xylz/archive/2010/07/06/325390.html

    个人理解:cas-硬件同步原语,就是比较并交换(内存,预期,新值):起初内存中是预期的值,之后预期值和新值比较,一致则修改内存值为新值,否则什么也不做。

           锁的粒度越细,并发度越高。

         cas机制是一种思想,硬件采用这种思想实现同步原语,jdk1.5本质同步原语基于CAS机制实现,最终转换成硬件同步原语实现,效率高。(cas就是实现原子操作的微命令,保证操作时原子性)

        AQS:AQS是concurrent包中的一系列同步工具的基础实现,其提供了状态位,线程阻塞-唤醒方法,CAS操作(程序原子操作)。基本原理就是根据状态位来控制线程的入队阻塞、出队唤醒来解决同步问题

    ======================================================

    AQS:AbstractQueuedSynchronizer一个类:

    获取锁:首先判断当前状态是否允许获取锁,如果是就获取锁,否则就阻塞操作或者获取失败,也就是说如果是独占锁就可能阻塞,如果是共享锁就可能失败。另外如果是阻塞线程,那么线程就需要进入阻塞队列。当状态位允许获取锁时就修改状态,并且如果进了队列就从队列中移除。

    释放锁:这个过程就是修改状态位,如果有线程因为状态位阻塞的话就唤醒队列中的一个或者更多线程

    • 原子性操作同步器的状态位
    • 阻塞和唤醒线程
    • 一个有序的队列

    LockSupport支持线程阻塞,唤醒-----挂起或者唤醒机制(本质调用操作系统的进行同步原语---硬件的微命令操作)

    AQS采用的CHL模型:对于入队列(enqueue):采用CAS操作,每次比较尾结点是否一致,然后插入的到尾结点中。对于出队列(dequeue):由于每一个节点也缓存了一个状态,决定是否出队列,因此当不满足条件时就需要自旋等待,一旦满足条件就将头结点设置为下一个节点

    ==================================================================================================

    一元信号量机制

    二元信号量机制

    多元信号量机制

    原语操作(微命令)

    资源(共享资源)

    监视器(轮询性质)

    =================================================================================================== 

      

  • 相关阅读:
    用OBS studio(Open Broadcaster Software)录屏
    强力粘胶,粘金属
    Win10下不用虚拟机安装ubuntu, 及bash shell打开教程
    latex 的工具集
    python game游戏开发
    usdt 大户列表
    linux, windows, mac 的c/c++程序使用 breakpad 来进行崩溃汇报
    将python代码编译成目标机elf可执行程序的方法
    python的zigzag实现及金融技术指标分析库
    如何在left Join 中使用order排序
  • 原文地址:https://www.cnblogs.com/gstsyyb/p/3789103.html
Copyright © 2020-2023  润新知