12.4 如果我们的程序用到了多线程,我们相对临界区进行加锁处理,避免竞态条件的出现
- 可以利用threading模块的Lock对象来处理
import threading
class ShareCounter:
def __init__(self,initial_value=0):
self._value=initial_value
self._value_lock = threading.Lock()
def incr(self,delta=1):
with self._value_lock:
self._value +=delta
def decr(self,delta=1):
with self._value_lock:
self._value -=delta
- 当使用with语句是,Lock对象可确保产生互斥的行为,也就是说,同一时间只允许一个线程执行with语句中的代码块,with语句会在执行缩进的代码块时获取到锁,当控制流离开缩进的语句块时释放这个锁
- 尽量使用with语句去调用锁Lock,以防代码忘记调用release方法来释放Lock
网友评论