首页 新闻 赞助 找找看

为什么这个锁没有用啊

-1
悬赏园豆:100 [待解决问题]

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的情况啊?求大佬帮忙看下

CecilSxm的主页 CecilSxm | 初学一级 | 园豆:104
提问于:2018-11-04 13:55

建议给代码加上高亮,支持 markdown

dudu 5年前
< >
分享
所有回答(1)
0

刚刚运行了一下你的代码,确实是这样的。我想会出现a不等于b 这种情况出现的原因可能和时间片有关系,因为一个线程在运行过程并不是总占着cpu一直运行的,系统会给每一个线程分配一定的时间(时间片),时间一到就会被强制切换到其他的线程,出现不等的情况我想就是因为主线程在a加过1之后被强制切换了,子线程运行也就出现了可以打印的情况。

xiaobaiskill | 园豆:1087 (小虾三级) | 2018-12-26 18:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册