import threading
# 假定这是你的银行存款:
local_balance = threading.local()
local_balance.num = 0
def change_it(n):
# 先存后取,结果为0:
local_balance.num = 0
local_balance.num = local_balance.num + n
local_balance.num = local_balance.num - n
def run_thread(n):
for i in range(100000):
change_it(n)
t1 = threading.Thread(target=run_thread, args=(5,))
t2 = threading.Thread(target=run_thread, args=(8,))
t1.start()
t2.start()
t1.join()
t2.join()
print(local_balance.num)
本文通过一个简单的Python示例展示了如何使用线程局部变量来避免数据竞争问题。该示例创建了两个线程,每个线程都会改变同一个local_balance.num的值,但由于使用了threading.local(),实际上每个线程都拥有该变量的一个独立副本。
1万+

被折叠的 条评论
为什么被折叠?



