请问 Python 3.11 版本是对线程安全做了什么更改吗?

查看 51|回复 1
作者:ohayoo   
import threading
num = 0
def add():
    global num
    for i in range(10_000_000):
        num += 1
def sub():
    global num
    for i in range(10_000_000):
        num -= 1
if __name__ == "__main__":
    add_t = threading.Thread(target=add)
    sub_t = threading.Thread(target=sub)
    add_t.start()
    sub_t.start()
    add_t.join()
    sub_t.join()
    print("num result : %s" % num)
昨天偶然发现这份代码在 3.11.3 中它居然输出 0 ,一度以为自己写错了,抱着不信邪的态度,又搞了个 Python 3.9.7 的环境试了下,果然还是符合自己预期,输出不为 0
想问下 3.11 版本中是做了什么修改吗?

num, threading, Python, thread

v2exblog   
num -= 1 这个字节码在 3.9 和 3.11 不一样,可以用 dis 模块看一下
您需要登录后才可以回帖 登录 | 立即注册

返回顶部