正式的Python专栏第52篇,同学站住,别错过这个从0开始的文章!
前面学委介绍线程安全的时候,提到过threading.Lock这个类。
这个所以我们acquire之后,就不能继续acquire了,必须执行一次release,其他线程才可以继续acquire。
这样一个时间只有一个线程做事情,这次我们看看RLock(ReentrantLock,可重入锁)。
RLock 是什么?
简单理解,它跟Lock类似,都是用来协调对受限资源的访问,加上锁来保护受限资源的访问。
但是,它们还是有明显的区别的。 第一个是,RLock可以被acquire多次。
我们看看下面的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/24 12:02 上午
# @Author : LeiXueWei
# @优快云/Juejin/Wechat: 雷学委
# @XueWeiTag: CodingDemo
# @File : __init__.py.py
# @Project : hello
import random
import threading
import datetime
import time
xuewei_account = 100
lock = threading.RLock()
# amount为负数即是转出金额
def transfer(money):
transfer_only(money)
lock.release()
print("release")
# amount为负数即是转出金额
def transfer_only(money):
lock.acquire()
print("transfer now")
global xuewei_account