Блокированные операции в iOS? - PullRequest
12 голосов
/ 01 февраля 2011

Есть ли в iOS SDK взаимосвязанные (атомарные) операции?

Мне нужно взаимосвязанное увеличение \ уменьшение и сравнение с блокировкой.

* ОБНОВЛЕНИЕ: * Моя основная проблема - ожидание нескольких NSThreads, созданных основным потоком (основной поток не должен работать, пока работают другие потоки).

Я не знаю, как это сделать.

Ответы [ 4 ]

16 голосов
/ 01 февраля 2011

Вы можете использовать операции OSAtomicIncrement* / OSAtomicDecrement*, описанные в Использование атомарных операций .

2 голосов
/ 01 февраля 2011

Обновление: Теперь доступны атомы уровня языка в C11 и C ++ 11.

Вы можете просто объявить _Atomic(int) a;.

Ещеподробное введение .


атомарных операций и их документации можно найти в libkern/OSAtomic.h.обзор также можно найти в разделе man atomic.

, вы, вероятно, очень скоро найдете поддержку языков / библиотек C11 и C ++ 11.

0 голосов
/ 01 февраля 2011

Objective-C имеет ключевое слово synchronized для атомарных операций.

@synchronized(object) {
    // ...
}

Если вы укажете атрибут atomic в объявлении свойства, методы установки и получениябудет синтезирован с использованием этих синхронизированных блоков.

Также посмотрите протоколы NSLock и NSLocking.

0 голосов
/ 01 февраля 2011

Вы можете взглянуть на свойства (функция ObjectiveC 2.0).

@property int atomicProperty;

На самом деле нет никакого атомарного спецификатора, так как свойства по умолчанию имеют атомарный. Они могут быть установлены как «неатомные».

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html

Вас может заинтересовать @synchronized. Или эта часть документа:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...