下面的代码中锁定了什么,当其他线程之前启动时,为什么代码可以使用lock.acquire
并释放此锁?那么锁的作用是什么呢
我想表达的是锁定主线程,代码是为了使文本看起来有序,我可以凭直觉理解,而不是凭逻辑。也许我缺乏一些关于线程的知识
import threading
import sys
import time
import pdb
def showfoo(n):
for _ in range(n):
lockpython.acquire() # 获取对方的锁,释放自己的锁
print('foo',end="")
sys.stdout.flush() # 释放缓冲区
lockfoo.release()
time.sleep(1)
def showbar(n):
for _ in range(n):
lockfoo.acquire() # 获取对方的锁,释放自己的锁
print('bar',end="")
sys.stdout.flush() # 释放缓冲区
lockbar.release()
time.sleep(1)
def showpython(n):
for _ in range(n):
lockbar.acquire() # 获取对方的锁,释放自己的锁
print('python',end="")
sys.stdout.flush() # 释放缓冲区
lockpython.release()
time.sleep(1)
if __name__ == '__main__':
lockfoo = threading.Lock() # 定义3个互斥锁
lockbar = threading.Lock()
lockpython = threading.Lock()
n = int(input())
t1 = threading.Thread(target=showfoo, args=[n]) # 定义3个线程
t2 = threading.Thread(target=showbar, args=[n])
t3 = threading.Thread(target=showpython, args=[n])
lockfoo.acquire() # 先锁住foo,bar锁,保证先打印foo
lockbar.acquire()
t1.start()
t2.start()
t3.start()
showbar
和showpython
在其for循环的第一次迭代中暂停showfoo
获取一个锁;做某事;然后释放另一个锁您设计锁获取和释放的方式会导致线程按顺序运行
相关问题 更多 >
编程相关推荐