在多线程中锁的重要性众所周知,死锁的情况也经常出现,特别是在线程崩溃的时候,如果已经加锁,其他的线程会因为永远无法获取到锁而等待下去。
如果所有的操作都是手动的lock,unlock,势必会造成操作的麻烦,自动加解锁应运而生
在C++中可以利用类的构造函数和析构函数进行自动加解锁,那么在python中如何实现?
答案是利用with,with可以保证在异常的情况下依然可以执行退出操作
实现代码如下
class AutoLock:
def __init__(self):
self._lock = Lock()
def __enter__(self):
print('lock')
self._lock.acquire()
def __exit__(self, exc_type, exc_val, exc_tb):
print('unlock')
self._lock.release()
测试代码
auto = AutoLock()
with auto:
raise ('123')
执行结果
其他类型锁的实现类似