python学习中各种锁机制

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

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

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

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

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

3. 乐观锁和悲观锁:

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

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

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

4. 两种锁的使用场景:

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

5.乐观锁的实现方式: 

 1.版本号机制: 一般是通过在数据表中加上一个数据库版本version字段
 2.CAS算法: compare and swap(比较与交换),是一种无锁算法
原文地址:https://www.cnblogs.com/yqyn-study/p/13455636.html