Objective-C中的原子属性与线程安全

问题描述 投票:29回答:5

在我已阅读的大多数讨论中,它表明使属性成为原子并不保证它是线程安全的,它只是保证所返回的值不会由于一个对象写入该对象而成为垃圾。和另一个试图同时阅读它。

我知道这不是线程安全的,因为第三个对象可能正在写它,而访问它的对象不会得到垃圾回收,但并不确定在多个对象写入时将返回哪个值同时,它可能会获得它们的任何值。

因此,当我们说它不会返回垃圾时,垃圾的含义是,如果一个对象是非原子的并且一个对象试图在另一个对象写入它的同时访问它,那么它可能会将结果返回到写入前,并且仅获得写入所带来的更改的部分,不完整版本?从这个意义上来说,这是“垃圾”的意思吗?原子的性质有助于防止这种情况吗?

ios objective-c multithreading thread-safety atomicity
5个回答
40
投票

Object C中的atomic属性可确保您永远不会看到部分写入。当@property具有属性atomic时,不可能仅部分写入该值。设置器是这样的:


6
投票

回答您的第三段;本质上是。线程正在写入原子数时无法读取该原子数。


4
投票

罗伯特·哈维(Robert Harvey)的回答是正确的,但有一个子案例可以考虑人们经常错过。考虑以下代码:http://pastebin.com/S7XyJm6G


0
投票

在并发编程中:


0
投票

的显式实现

© www.soinside.com 2019 - 2024. All rights reserved.