zoukankan      html  css  js  c++  java
  • python学习中各种锁机制

    1. 互斥锁:  对全局变量进行锁定,保证同一时刻只有一个线程在操作共享全局变量,保证了共享数据操作的完整性

       互斥锁应用场景: 资源竞争问题 

       互斥锁的缺点:   阻止了多线程并发执行,含锁的代码只能以单线程模式执行,效率就大大地下降了; 容易出现死锁问题;

    2. 死锁问题: 在两个或多个线程中,如果每个线程都锁定了其他线程试图锁定的共享资源,此时会让这些线程永久阻塞.

     避免死锁: 在设计程序时, 尽量减少资源竞争, 无法避免资源竞争时, 各个线程及时释放锁定的资源.

    3. 乐观锁和悲观锁:

    # 什么是乐观锁和悲观锁? 对悲观锁和乐观锁的理解?

    悲观锁: 每次去拿数据时都会认为别人会修改,所以每次在拿数据时都会上锁,这样就能保证同一时刻只能有一个用户去操
    作.传统的关系型数据库里有很多这种锁机制(行锁, 表锁, 读锁,写锁 这些都是在操作之前先上锁),Java中synchronized
    和ReentrantLock等独占锁就是悲观锁思想的实现。

    乐观锁: 相对悲观锁而言,乐观锁总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新
    的时候,会判断一下在此期间别人有没有去更新这个数据.

    4. 两种锁的使用场景:

    悲观锁适用于多写的场景,冲突多; 乐观锁适用于多读场景,冲突少,可以省去了锁的开销,加大系统的整个吞吐量.

    5.乐观锁的实现方式: 

     1.版本号机制: 一般是通过在数据表中加上一个数据库版本version字段
     2.CAS算法: compare and swap(比较与交换),是一种无锁算法
  • 相关阅读:
    Java泛型类和泛型方法
    Java泛型解析
    Reflection and array
    再叙Java反射
    Java Reflection(getXXX和getDeclaredXXX)
    Java反射(Reflection)
    MySQL Block Nested Loop and Batched Key Access Joins(块嵌套循环和批量Key访问连接)
    jQuery学习之jQuery Ajax用法详解
    request和request.form和request.querystring的区别
    浏览器中event.srcElement和event.target的兼容性问题
  • 原文地址:https://www.cnblogs.com/yqyn-study/p/13455636.html
Copyright © 2011-2022 走看看