2012-04-10 50 views
0

iPhone/Objective-C是否有标准的共享/独占锁定/信号灯方案?或者,(有什么要对内部对象进行同步操作,没有文件访问。)用于iPhone和Objective-C的共享/排他锁机制?

,如果我要推出自己的,这将是建立在最好的原语?

我需要这个来实现独立的读写锁,以提高并发性。 (这应该是显而易见的,但我想你必须拼出来的一切。)

+3

你能澄清这类问题你正在试图解决?也许是一个例子?让我想起使用其他语言技术的这类问题通常会转化为iOS中略微不同的设计,而不是再现其他开发环境的构造。例如,为了防止锁定不支持同时访问的db/object,而不是锁定机制,可以使用GCD队列。等等顺便说一句,如果你需要它,GCD确实会允许信号量。 – Rob 2012-04-10 17:37:52

+0

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

+0

@AndrewMadsen - '@ synchronized'不启用共享/独占。并且使用GCD队列(如果甚至可能的话)将需要完全重构大量现有的iPhone代码。 – 2012-04-10 19:03:05

回答

1

您已经几个选项。实现通常基于在接口:

#include <pthread.h> // << for locks and threads 
#include <semaphore.h> // << for semaphore 

可可(例如)包覆所述锁定接口与NSLock(和特)。

+0

是的,我希望能“罐装”,但如果我必须我可能会使用这些。我也在看NSConditionLock,它看起来非常接近于具有必要的原始特征。不幸的是'@ synchronized'没有实现共享/排他选项。 – 2012-04-10 19:21:27

+0

@HotLicks好吧,有多个抽象使用我引用的基础知识。 '@ synchronized'是效率最低的(到目前为止已经提到的)。 – justin 2012-04-10 19:26:29

+0

其实,我看到的是并行线程具有pthread_rwlock,这将是我所需要的,如果它的高效,合理的“公平”。 (如果iOS实际实现它。) – 2012-04-10 19:34:53