gpt4 book ai didi

python - python3中的互斥锁

转载 作者:行者123 更新时间:2023-12-05 03:25:47 24 4
gpt4 key购买 nike

我在第一个函数中使用互斥来阻塞部分代码。我可以在第二个函数中解锁互斥量吗?例如:

import threading

mutex = threading.Lock()

def function1():
mutex.acquire()
#do something

def function2():
#do something
mutex.release()
#do something

最佳答案

您当然可以做您要求的事情,在一个函数中锁定互斥量并在另一个函数中解锁它。但你可能不应该。这是糟糕的设计。如果使用这些函数的代码以错误的顺序调用它们,则互斥量可能被锁定并且永远不会解锁,或者在未锁定时被解锁(或者更糟糕的是,当它被不同的线程锁定时)。如果您只能以一种顺序调用函数,为什么它们甚至是单独的函数?

一个更好的主意可能是将锁定处理代码移出函数,让调用者负责锁定和解锁。然后,您可以使用 with 语句来确保锁定和解锁完全配对,即使遇到异常或其他意外行为也是如此。

with mutex:
function1()
function2()

或者,如果不是这两个函数的所有部分都是“热的”并且需要锁定以确保它们正确运行,您可以考虑将需要锁定的部分分解为在其他两个函数之间运行的第三个函数:

function1_cold_parts()
with mutex:
hot_parts()
function2_cold_parts()

关于python - python3中的互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71914320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com