gpt4 book ai didi

Python如何同步线程?

转载 作者:行者123 更新时间:2023-12-01 08:55:54 26 4
gpt4 key购买 nike

我正在学习使用 Python 进行并发编程。

在下面的代码中,我似乎遇到了同步问题。我该如何修复它?

import threading
N = 1000000
counter = 0

def increment():
global counter
for i in range(N):
counter += 1

t1 = threading.Thread(target=increment)
t2 = threading.Thread(target=increment)

t1.start()
t2.start()
t1.join()
t2.join()

print(counter)

最佳答案

两个线程都试图同时修改counter,有时确实如此。这会导致一些增量不出现。这是使用 threading.Lock 解决该问题的简单方法:

import threading

N = 1000000
counter = 0

def increment(theLock):
global counter
for i in range(N):
theLock.acquire()
counter += 1
theLock.release()

lock = threading.Lock()
t1 = threading.Thread(target=increment, args=[lock,])
t2 = threading.Thread(target=increment, args=[lock,])

t1.start()
t2.start()
t1.join()
t2.join()

print(counter)

theLock.acquire()theLock.release() 包围必须 protected 代码,使其一次只能在一个线程中运行。在您的示例中,获取和释放也可以围绕整个循环,但这与不使用多处理相同。请参阅threading documentation特别是锁定对象部分。

关于Python如何同步线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52770440/

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