2012-04-10 43 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