我在python中有一个简单的线程示例,其中一个线程每秒递增一次计数,另一个每5秒递减一次。这是代码
# threading example
import threading
import time
lock = threading.Lock()
count = 0
def a():
global count
while(1):
lock.acquire()
try:
count += 1
print('a: ', count )
finally:
time.sleep(1)
lock.release()
def b():
global count
while(1):
lock.acquire()
try:
count -= 1
print('b: ', count )
finally:
time.sleep(5)
lock.release()
t = threading.Thread(name='a', target=a)
w = threading.Thread(name='b', target=b)
t.start()
w.start()
然而,似乎只有线程t打印出来的东西,而线程w却没有。这是输出:
a: 1
a: 2
a: 3
a: 4
a: 5
a: 6
a: 7
a: 8
a: 9
出了什么问题?
答案 0 :(得分:3)
你需要在睡觉前释放锁,否则你永远不会释放锁。
变化:
finally:
time.sleep(1)
lock.release()
要:
finally:
lock.release()
time.sleep(1)
对另一个帖子做同样的事情。您只需要在递增/递减期间锁定,它是唯一具有线程安全问题的操作。