2012-02-10 10 views
0

Я устанавливаю переменную в потоке, и я проверяю ее использование для условия в другом потоке.переменная set & Get, состояние гонки

Здесь я знаю состояние гонки. Но не уверен, что выполнения набора по атомному пути будет достаточно.

Не могли бы вы дать мне знать, как это решить в объективе-c.

ОБНОВЛЕНИЕ: Пожалуйста, также дайте мне знать, как это сделать для глобальной переменной.

ответ

1

Многие решения этой обобщенной задачи были предложены в течение последних 50 лет. :)

Изменение семантики сеттера на атомарное НЕ решает проблему --- это просто предотвращает возникновение изменений во время получения и настройки вашей переменной (см. Objective-C Documentation за то, что она на самом деле делает).

Что вы хотите - это механизм сигнализации между потоками. Выезд Objective-C Conditions.

+0

кто-то написал бы хорошо протестированный и безнадежный вариант реализации для этой обычной проблемы – coder000001

0

Если вы определяете его как свойство, используйте ключевое слово атома. Или просто оставьте неатомическое ключевое слово, так как атомный - более медленное значение по умолчанию.

@property (atomic, retain) NSString *value; 

или просто

@property (retain) NSString *value; 
+0

Будет ли этого достаточно, чтобы избежать состояния гонки? – coder000001

Смежные вопросы