【发布时间】:2011-06-19 05:42:59
【问题描述】:
iOS SDK 中是否有互锁(原子)操作?
我需要联锁递增\递减和联锁比较。
*更新:* 我的主要问题是等待由主线程创建的几个 NSThreads(主线程不能工作,而其他线程工作)。
我不知道该怎么做。
【问题讨论】:
标签: iphone objective-c ios concurrency
iOS SDK 中是否有互锁(原子)操作?
我需要联锁递增\递减和联锁比较。
*更新:* 我的主要问题是等待由主线程创建的几个 NSThreads(主线程不能工作,而其他线程工作)。
我不知道该怎么做。
【问题讨论】:
标签: iphone objective-c ios concurrency
您可以使用Using Atomic Operations 中描述的OSAtomicIncrement*/OSAtomicDecrement* 操作。
【讨论】:
更新:现在可以使用 C11 和 C++11 下的语言级原子。
您可以简单地声明_Atomic(int) a;。
原子操作及其文档可以在libkern/OSAtomic.h 中找到。可以在man atomic 下找到概述。
同样,您可能很快就会发现 C11 和 C++11 语言/库支持。
【讨论】:
Objective-C 有关键字 synchronized 用于原子操作。
@synchronized(object) {
// ...
}
如果您在属性声明中指定属性 atomic,则 setter 和 getter 将使用这些同步块合成。
同时查看NSLock 和NSLocking 协议。
【讨论】:
您可以查看属性(ObjectiveC 2.0 功能)。
@property int atomicProperty;
实际上没有“原子”说明符,因为属性默认为原子。它们可以设置为“非原子”。
您也可能对@synchronized 感兴趣。或者文档的这一部分:
【讨论】: