1
6
基元类型不能保证不会被部分修改,因为对基元类型的修改不能保证在C中是原子的,Objective-C从那里继承。C只保证关注序列点,不要求两个序列点之间的处理是原子的——经验法则是每个完整的表达式都是一个序列点。
在实践中,修改基元通常是一个分两步的过程;在寄存器中进行修改,然后将其写入存储器。写入本身不太可能是原子的,但也不能保证它何时会发生,而不是修改。即使有
苹果通过 OSAtomic.h 直接映射到CPU为实现并发机制提供的专门原子指令。你可以更直接地使用其中一个,而不是通过一个强大的互斥体。 Objective-C中的常见模式有:
主线程本身是一个串行调度队列,这就是为什么如果您将自己限制在并发性问题上,则可以完全忽略并发性问题。 |
2
3
原子合成@财产不受并发部分更新的影响。如果需要,访问器方法将在该体系结构上使用锁。 一般来说,对于并发的部分更新,C中的基元类型不一定是安全的。 |
3
-2
我不相信你可以部分修改一个原始类型,这是它们原始的部分原因。你要么修改它,要么不修改。从这个意义上说,我想说它们是线程安全的。 当你说atomic关键字对于基元类型来说毫无意义时,你是正确的。 有人已经在这里捅了一刀: Objective-c properties for primitive types |
Martin sku · 在目标C中打印时间 2 年前 |
Vinod prajapat · 如何更新数组的最后一个元素? 2 年前 |
subin272 · 修复iOS中的多个按钮单击事件? 6 年前 |
James Chan · 如何使用锁定/解锁? 6 年前 |
Josh F. · NSBundle mainBundle返回零 6 年前 |