python中的互斥锁
来源:互联网 发布:内存 知乎 编辑:程序博客网 时间:2024/06/06 03:23
如果没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期。这种现象称为“线程不安全”。
线程同步解决问题:
- 系统调用t1,然后获取到num的值为0,此时上一把锁,即不允许其他现在操作num
- 对num的值进行+1
- 解锁,此时num的值为1,其他的线程就可以使用num了,而且是num的值不是0而是1
- 同理其他线程在对num进行修改时,都要先上锁,处理完后再解锁,在上锁的整个过程中不允许其他线程访问,就保证了数据的正确性
from threading import Thread, Lock
num =0 #资源竞争问题
mutex= Lock() #创建一个互斥锁
def fun1():
global num
for i in range(1000000):
mutex.acquire()
# acquire首先判断锁的当前状态,如果锁处于上锁状态,则默认处于阻塞等待,
#等待直到锁变成未上锁状态的时候,才能继续向下运行
#如果一旦发现锁处于未上锁状态,则将锁设置为上锁
num += 1
mutex.release() # 释放锁,表示将锁设置为打开状态
def fun2():
global num
for i in range(1000000):
mutex.acquire()
num += 1
mutex.release() # 释放锁,表示将锁设置为打开状态
t1 =Thread(target=fun1) #创建一个线程对象
t2 =Thread(target=fun2) #创建一个线程对象
t1.start() #开启线程的执行
t2.start()
t1.join() #回收线程资源
t2.join()
print(num)
阅读全文
1 0
- python中的互斥锁
- Python 中的@
- Python中的...
- 【python】Python中的self
- python -- python中的遍历
- 【python】python中的数据类型
- 【Python】Python中的None
- 【Python】Python中的注解“@”
- python中的非阻塞使用互斥锁
- [Python]Python函数参数中的*,**
- 浅析Python中的Python全局变量
- 浅析Python中的Python全局变量
- 浅析Python中的Python全局变量
- 【python】python参数中的星号*, **
- 浅析Python中的Python全局变量
- 浅析Python中的Python全局变量
- 初学python--python中的self
- 【python】Python中的logging模块
- (矩阵快速幂)fzu1911 Construct a Matrix
- Android中SQLite的基本用法
- Predix 安全服务漫谈
- JAVA 数据库SQL语句批处理
- Java基础——HelloWorld1
- python中的互斥锁
- 知识表示学习相关研究
- 递归方式实现打印一个整数的每一位(C语言)
- HDU
- python学习笔记之002.py
- 服务器杂谈
- Java多线程之对象锁,问:到底是哪个对象?
- WindowsService监听端口
- spring源码(10)从缓存中获取到单例bean的后续操作(对FactoryBean的处理)