锁的理解

来源:8-4 线程同步 - Lock

仙女座舜

2020-02-06

图片描述
关于锁为什么在add 和desc 方法中,只在一个方法加锁是不行的? add方法不是不会被打断吗?那一百万一定全都都加上去了,而desc也减少了1百万。为啥运行结果有正数也有负数,就是不为0?有点笨(●ˇ∀ˇ●) 求解

写回答

1回答

仙女座舜

提问者

2020-02-06

是因为这样写,在执行add 锁里面的代码的时候,依然会切出去到另一个线程里去执行desc这个方法,因为desc代码里没有加锁,所以不需要拿到同一个锁后才能执行代码,desc依然执行,因此只对一个方法加锁相当于都没加锁。即A线程的add方法被调用,依然切换会切换到B线程,而B线程的没加锁的代码都会正常执行。对吧?。

之前把加锁理解成加锁的代码全部执行完成前,cpu不会给其他线程分配时间因此,这种理解是错的。


1
3
bobby
回复
仙女座舜
好的,
2020-02-07
共3条回复

Python爬虫工程师实战 大数据时代必备

慕课网严选精品教程,高质量内容+服务!

2377 学习 · 1158 问题

查看课程