total结果不同的问题
来源:8-3 python的GIL真的会导致多线程慢吗?

小禹o0
2020-03-30
老师你好,我有一个疑问,add和desc方法分别对total进行+1和-1操作,虽然线程之间根据时间片不断切换,但是最终这个两个线程都是对total进行1000000次的操作,主线程等待两个线程运行结束,最终结果不应该还是0吗
写回答
1回答
-
说明你还没有懂这个地方的原因,这是一个经典的不同步的问题。因为 add += 1 分为3步:
1. 从内存中获取 num的值
2. 对num加一
3. 将值保存到内存中
如果这三个操作是不可打断的,那么就没问题,但是如果第一步完成以后 就被打断了, 比如A线程读取 num为0 A被切换了, 然后B线程也读取了值为0, 然后A加一之后num为1, 然后切换到B线程num减一为-1, 然后切换到A线程,这个时候num的值为1, 然后又切换到B这个时候内存的值被设置的-1, 这个时候两个线程都执行了 但是结果却为-1,就出问题了
532021-03-02
相似问题