首页 > 编程语言 > 详细

python学习中各种锁机制

时间:2020-08-08 21:24:25      阅读:103      评论:0      收藏:0      [点我收藏+]

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

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

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

 

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

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

 

3. 乐观锁和悲观锁:

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

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

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

 

4. 两种锁的使用场景:

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

 

5.乐观锁的实现方式: 

 1.版本号机制: 一般是通过在数据表中加上一个数据库版本version字段
 2.CAS算法: compare and swap(比较与交换),是一种无锁算法

 

python学习中各种锁机制

原文:https://www.cnblogs.com/yqyn-study/p/13455636.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!