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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objective-C中的原子属性与线程安全相关的知识,希望对你有一定的参考价值。

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

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

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

答案

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

另一答案

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

另一答案

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

另一答案

在并发编程中:

另一答案

的显式实现

以上是关于Objective-C中的原子属性与线程安全的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的锁和线程安全

iOS核心笔记——多线程-原子/非原子属性

并发与高并发-线程安全性-原子性-synchronized

多线程带来的风险——线程安全

多线程带来的风险——线程安全

Windows 操作系统中的线程安全和原子读取