Skip to content

4. 线程锁

在程序中如果想要自己手动加锁,一般有两种:Lock 和 RLock。 Lock 不可以嵌套加锁,RLock 可以嵌套加锁。

Lock(互斥锁)

Lock 开销小,速度快。

python
import threading

number = 0
lock_object = threading.Lock()


def task():
    print("线程开始")
    lock_object.acquire()  # 申请锁
    global number
    for _ in range(1000000):
        number += 1
    lock_object.release()  # 释放锁
    print(number)


for i in range(2):
    t = threading.Thread(target=task)
    t.start()

RLock(递归锁)

RLock 支持多次申请锁和多次释放锁。比较推荐使用这种方式。

python
import threading
import time

lock_object = threading.RLock()


def task():
    print("线程开始")
    lock_object.acquire()  # 申请锁
    print("第一次申请锁成功")
    lock_object.acquire()  # 再次申请锁
    print("第二次申请锁成功")
    time.sleep(2)
    lock_object.release()  # 释放锁
    print("第一次释放锁成功")
    lock_object.release()  # 再次释放锁
    print("第二次释放锁成功")


for i in range(2):
    t = threading.Thread(target=task)
    t.start()

构建时间:11/21/2025, 1:28:39 PM | 本博客内容均为自己学习,如内容涉及侵权,请联系邮箱:pangzl0215@163.com