l=Lock() a=1 b=1 def zi(): while True: if a!=b: print('a:{},b:{}'.format(a,b)) def main(): global a,b t=Thread(target=zi) t.start() while True: with l: a=a+1 b=b+1
main()
为什么在主线程里面加了锁,但是子线程还是会出现a,b不相等的情况啊?要么一起加1,要么就什么都不做,但是为什么还是会有a不等于b的情况啊?求大佬帮忙看下
建议给代码加上高亮,支持 markdown
刚刚运行了一下你的代码,确实是这样的。我想会出现a不等于b 这种情况出现的原因可能和时间片有关系,因为一个线程在运行过程并不是总占着cpu一直运行的,系统会给每一个线程分配一定的时间(时间片),时间一到就会被强制切换到其他的线程,出现不等的情况我想就是因为主线程在a加过1之后被强制切换了,子线程运行也就出现了可以打印的情况。
建议给代码加上高亮,支持 markdown
– dudu 6年前