1

我很确定我理解 NSCondition 和信号量(来自 c api)之间的区别。Apple 开发人员,尤其是 iPhone 开发人员更常用哪一种?

4

2 回答 2

7

根据我的经验,“两者都不是”。无论出于何种原因,信号量的使用都不足以让人气竞赛变得很重要。

不过,我是 dispatch_semaphore 的忠实粉丝。非常巧妙的实现。

于 2012-12-03T18:35:14.533 回答
3

dispatch_semaphore 肯定

同步对资源的并发访问的 objc 方法是避免锁定或 @syncronize(如果可能)并使用队列、串行或并发(ios5 >)

如果多个线程需要访问共享资源,它们可以分派到一个公共串行队列。通过以这种方式访问​​资源,我们避免了没有内核陷阱的并发访问。

可以使用并发队列(我认为在 wwdc11 视频中显示了这一点),例如,当多个线程可以同时访问一个资源进行读取,但我们需要一个同步点进行写入。这可以很容易地使用屏障来实现:写入线程将等待所有读取器完成,将资源独占写入并发队列,之后再次并发读取器可以访问资源。

我认为这是一个很好的资源https://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091用于在对象方式

于 2012-12-03T19:11:15.283 回答