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

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

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

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

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

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

    3. 乐观锁和悲观锁:

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

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

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

    4. 两种锁的使用场景:

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

    5.乐观锁的实现方式: 

     1.版本号机制: 一般是通过在数据表中加上一个数据库版本version字段
     2.CAS算法: compare and swap(比较与交换),是一种无锁算法
  • 相关阅读:
    iOS加载HTML, CSS代码
    iOS搜索指定字符在字符串中的位置
    【解决方法】You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE)
    刷新指定行或区 cell
    支付宝获取私钥和公钥
    什么是Git?
    第三方库AFNetworking 3.1.0的简单使用
    转:KVC与KVO机制
    转:常用的iOS开源库和第三方组件
    转:setValue和setObject的区别
  • 原文地址:https://www.cnblogs.com/yqyn-study/p/13455636.html
Copyright © 2011-2022 走看看