2016 - 2024

感恩一路有你

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

浏览量:1855 时间:2021-03-22 08:51:09 作者:admin

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

下面简要解释一下原因:

锁定是因为操作不是原子的。让我们用操作一来解释它。看下面两个图。

我这个操作需要

看上面的第二个图,你能很清楚地理解这个过程吗?

锁定是为了确保上述三个步骤是原子操作。

回到问题上来,只有一个线程要写,没有竞争,所以不需要锁定。

但是,如果你看第一张图片,因为主内存和本地内存的存在

在一个线程写入后,其他线程无法立即看到它。这就是可见性问题。

添加volatile关键字后,它将在操作后强制工作内存和主内存同步,以确保其他线程可以立即看到它。

volatile关键字在Java中有什么作用?

Volatile是为了防止指令重新排序以确保可见性

对于JVM级别,是为了防止编译器重新排序

同时,对于某些CPU,它们会通过缓存锁或线程来解决缓存可见性

但是,目前很多CPU已经过优化,由于cache一致性MESI会带来性能开销,因此采用storebuffer机制进行异步处理,这种机制会导致指令的无序执行。这会导致可见性问题。

然后volatile会在CPU级别增加内存屏障,解决CPU无序执行导致的可见性问题

另一点是第三方品牌电池有大容量版本。作者的iphone8plus换了3070mAh的大容量电池,6个多月来一直非常棒。而且,更换第三方品牌电池后,也没有问题。

对于消费者来说,苹果手机的电池健康状况只是一个参考数字,意义不大。。花500多元买原装电池有点不划算。

ios 原子和非原子 ios原子性和非原子性 原子贷app下载苹果

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。