七、互斥锁

互斥锁

互斥锁为资源引入一个状态:锁定/非锁定

某个线程要更改共享数据时,先将其锁定,此时资源的状态为“锁定”,其他线程不能更改;直到该线程释放资源,将资源的状态变为“非锁定”,其他的线程才能够再次锁定该资源。互斥锁保证了每次只有一个线程进行写入操作,从而保证了多线程情况下数据的正确性

'''
多个进程操作同一份数据的时候,会出现数据错乱的问题
针对上述问题,解决方式就是加锁处理:将并发变成串行,牺牲效率从而保证数据的安全
'''

扩展

'''
行锁 表锁

注意:
	1.锁不要轻易的使用,容易造成死锁现象(我们写代码一般不会用到,都是内部封装好的)
	2.锁只在处理数据的部分加,来保证数据安全(只在争抢数据的环节加锁处理即可)
'''

1、Lock类

multiprocessing模块中定义了Lock类,可以方便的处理锁定

  1. 语法:
from multiprocessing import Lock

# 生成一个锁对象
mutex = Lock()

1.1 acquire()

加锁

  1. 语法:
from multiprocessing import Lock

# 生成一个锁对象
mutex = Lock()

# 加锁操作
mutex.acquire()

'''
加锁操作应该放在该子进程对数据修改操作的代码前,从而实现在该子进程修改数据时,其他进程无法参入修改操作,保证数据的有序
'''

1.2 release()

释放锁

  1. 语法:
from multiprocessing import Lock

# 生成一个锁对象
mutex = Lock()

# 加锁操作
mutex.acquire()

'''
释放锁操作应该放在子进程对数据修改代码之后,从而能够在该进程对数据修改完毕后,及时释放锁,能让后续其他进程继续对该数据操作
'''

# 释放锁
mutex.release()
posted @ 2021-06-03 17:41  zzwYYYYYY  阅读(96)  评论(0)    收藏  举报