请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

测试线程同步问题

product = 100

def run1():
    global product
    for i in range(10000000):
        product -= 1
        print("consu now",product)


def run2():
    global product
    for i in range(10000000):
        product += 1
        print('pro now',product)

if __name__ == "__main__":
    c = threading.Thread(target=run1)
    p = threading.Thread(target=run2)
    c.start()
    p.start()
    c.join()
    p.join()
    print(product)

写了if name == "main"他就“同步了”,去掉的话就不同步,什么原理。
在代码示例的这种情况下我写了一千万但还是正确数据

正在回答

1回答

首先这种写法不论你是写到哪里product最后结果都不会是100, 我这里已经测试过了,只有加锁才能出现正确结果的

0 回复 有任何疑惑可以回复我~
  • 提问者 东泽XD #1
    奇了怪了,,,我之前测试结果一直是100,不用__main__之后结果就不是100了,今天再试用不用__main__结果都不是100了= =
    回复 有任何疑惑可以回复我~ 2020-11-23 09:02:27
  • bobby 回复 提问者 东泽XD #2
    多测试几次试试 这个代码肯定不会同步成最后的100的
    回复 有任何疑惑可以回复我~ 2020-11-24 10:43:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信