python题(线程+GIL)

系统 243 0

1:

            
              import threading
num = 0  # 非原子操作 资源竞争
l = []  # GIL 原子操作


def work1():
    global num
    for i in range(1000000):
        num += 1
        l.append(i)  # 一个字节码指令
    print(num, len(l))


def work2():
    global num
    for i in range(1000000):
        num += 1
        l.append(i)
    print(num, len(l))

if __name__ == '__main__':
    first_threading = threading.Thread(target=work1)
    second_threading = threading.Thread(target=work2)
    first_threading.start()
    # first_threading.join()  # 在第二个开始前
    second_threading.start()
    print("主线程继续。。。。。。")




            
          

结果:

            
              主线程继续。。。。。。
1486523 1917864
1568659 2000000


            
          

多线程会出现资源竞争,导致num自加操作不准
GIL全局解释所,是线程安全,级别字节码。对于list的append操作是安全的。


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请请扫描上面二维码支持博主1元、2元、5元等您想捐的金额吧,狠狠点击下面给点支持吧

发表我的评论
最新评论 总共0条评论