【发布时间】:2014-02-01 14:58:47
【问题描述】:
在我读过的大多数讨论中,它表明使属性原子化并不能保证它是线程安全的,它只是保证返回的值不会因为一个对象写入而成为垃圾它和另一个试图同时阅读它。
我知道这不是线程安全的,因为第三个对象可能正在写入它,虽然访问它的对象不会回收垃圾,但由于多个对象正在写入它,它并不完全确定它将返回哪个值同时,它可能会得到它们的任何值。
所以当我们说它不会返回垃圾时,垃圾是指如果一个对象是非原子的并且一个对象试图访问它而另一个对象正在写入它,它可能会在中间返回结果 -写,并且只得到写带来的变化的部分、不完整的版本?这就是“垃圾”在这个意义上的含义吗?哪些原子属性有助于防止?
【问题讨论】:
-
关于“线程安全”的事情是,没有什么本身是“线程安全的”。 “线程安全”只能在给定上下文中真正确定,其中“线程安全”意味着尽管有任何可能的多线程,但可以确保整个上下文的正确操作。例如,可变数组的特定实现可以说是真空中的“线程安全”,因为永远不会访问内部不一致的数据,但如果它的条目没有与其引用的外部数据保持同步,那将毫无意义。而且这种同步只能在外部维持。
-
@doug-smith 您可能会发现我对这个问题的回答 + 后面的 cmets 很有帮助。 stackoverflow.com/questions/588866/…
标签: ios objective-c multithreading thread-safety atomic