iPhone/Objective-C是否有标准的共享/独占锁定/信号灯方案?或者,(有什么要对内部对象进行同步操作,没有文件访问。)用于iPhone和Objective-C的共享/排他锁机制?
,如果我要推出自己的,这将是建立在最好的原语?
我需要这个来实现独立的读写锁,以提高并发性。 (这应该是显而易见的,但我想你必须拼出来的一切。)
iPhone/Objective-C是否有标准的共享/独占锁定/信号灯方案?或者,(有什么要对内部对象进行同步操作,没有文件访问。)用于iPhone和Objective-C的共享/排他锁机制?
,如果我要推出自己的,这将是建立在最好的原语?
我需要这个来实现独立的读写锁,以提高并发性。 (这应该是显而易见的,但我想你必须拼出来的一切。)
您已经几个选项。实现通常基于在接口:
#include <pthread.h> // << for locks and threads
#include <semaphore.h> // << for semaphore
可可(例如)包覆所述锁定接口与NSLock
(和特)。
是的,我希望能“罐装”,但如果我必须我可能会使用这些。我也在看NSConditionLock,它看起来非常接近于具有必要的原始特征。不幸的是'@ synchronized'没有实现共享/排他选项。 – 2012-04-10 19:21:27
@HotLicks好吧,有多个抽象使用我引用的基础知识。 '@ synchronized'是效率最低的(到目前为止已经提到的)。 – justin 2012-04-10 19:26:29
其实,我看到的是并行线程具有pthread_rwlock,这将是我所需要的,如果它的高效,合理的“公平”。 (如果iOS实际实现它。) – 2012-04-10 19:34:53
你能澄清这类问题你正在试图解决?也许是一个例子?让我想起使用其他语言技术的这类问题通常会转化为iOS中略微不同的设计,而不是再现其他开发环境的构造。例如,为了防止锁定不支持同时访问的db/object,而不是锁定机制,可以使用GCD队列。等等顺便说一句,如果你需要它,GCD确实会允许信号量。 – Rob 2012-04-10 17:37:52
Objective-C中包括'@synchronized()'指令:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocThreading.html像罗伯特·瑞安提到,GCD可以一种在iOS(和Mac OS X)中执行多线程的好方法,它避免了编写更多传统多线程代码所涉及的一些(但不是全部)乏味和困难。 – 2012-04-10 17:39:36
@AndrewMadsen - '@ synchronized'不启用共享/独占。并且使用GCD队列(如果甚至可能的话)将需要完全重构大量现有的iPhone代码。 – 2012-04-10 19:03:05