多个线程可以读一个变量,只有一个线程可以对这个变量进行写,到底要不要加锁

更新时间:02-01 教程 由 情殇 分享

先说结论:不必要

如果不需要可见性,什么都不需要加如果需要保证可见性,则需要加volatile关键字。这里可以加锁,但是没必要,对性能有影响

下面简单解释下原因:

加锁是因为操作不是原子性的,以i++这个操作来解释,看下面两张图。

i++这个操作需要

先将i的值从内存中读出来然后加1最后写回去

看上面第二张图,能很清楚的理解流程吧?

加锁就是保证上面的三步是一个原子操作。

回到问题,这里只有一个线程写,实际没有竞争,所以没必要加锁。

但是,看第一张图,因为有主内存和本地内存的存在

线程先写入本地内存然后刷入主内存其它内存同步主内存到工作内存然后从工作内存中读取

一个线程写入后,不能保证其它线程立即看到,这就是可见性问题。

加了volatile关键字后,会强制操作后同步工作内存和主内存,保证其它线程立刻看到。

声明:关于《多个线程可以读一个变量,只有一个线程可以对这个变量进行写,到底要不要加锁》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2273726.html