【发布时间】:2022-11-26 23:11:01
【问题描述】:
我试图获得以下交替运行 2 个线程的结果。 *在 0 到 5 之间,线程 A 打印偶数,线程 B 打印奇数:
A:0
B:1
A:2
B:3
A:4
B:5
因此,使用全局变量、锁和 while 语句,我创建了下面的代码来尝试获得上面的结果:
import threading
lock = threading.Lock()
owner = "A"
i = 0
def test1():
global owner, i
while i <= 5:
lock.acquire()
if owner == "A":
print(owner + ":" + str(i))
owner = "B"
i += 1
lock.release()
def test2():
global owner, i
while i <= 5:
lock.acquire()
if owner == "B":
print(owner + ":" + str(i))
owner = "A"
i += 1
lock.release()
A = threading.Thread(target=test1)
B = threading.Thread(target=test2)
A.start()
B.start()
A.join()
B.join()
但是,上面的代码使用 A:6 得到了下面的结果。 *线程A 打印偶数6:
A:0
B:1
A:2
B:3
A:4
B:5
A:6 # Here
我找不到任何错误,所以如果没有A:6,我怎么能得到正确的结果呢?为什么我用A:6得到了结果?
【问题讨论】:
标签: python python-3.x multithreading python-multithreading alternate