Я работаю над относительно простым приложением iPhone, которое имеет многоканальный таймер с рядом настроек, таких как количество раундов и круглую длину. Мы разрешаем устанавливать определенные настройки во время работы таймера, что означает, что таймер может считывать из той же памяти, что и записи параметров. Не существует критических разделов кода, в которых одновременно выполняются несколько потоков, но код из настроек может пытаться записать память, с которой отсчитывает таймер.Действительно ли блокировка в моем приложении iPhone?
С точки зрения простого примера, скажем, мы глобальная переменная Foo и есть метод NSTimer который выглядит следующим образом:
- (Недействительными) timerTick { NSString * х = Foo; }
затем в коде настроек, мы делаем это в то время как таймер работает:
Foo = @ "тест";
Будет ли достаточно, чтобы сделать foo атомарным в этом приложении или нам нужна какая-то схема блокировки?
Спасибо.
«... полученный таймер добавляется в основной цикл цикла». Нет, не обязательно. Он добавляется в цикл * current * run-i.e, цикл запуска на ** текущий поток, который не может быть основным потоком **. http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSTimer_Class/Reference/NSTimer.html#//apple_ref/occ/clm/NSTimer/scheduledTimerWithTimeInterval:target:selector:userInfo: повторяет: http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/Reference/Reference.html#//apple_ref/occ/clm/NSRunLoop/currentRunLoop –
Я думаю, что это было больше в соответствии с тем, что вы имели в виду: «... если вы не создаете ни одного потока самостоятельно, нет никакого беспокойства о блокировке и т. д.» Это правильно: если вы еще не создали другой поток, тогда основной поток является текущим нить, поэтому таймер будет в цикле запуска основного потока * в этом случае *. Если вы хотите запустить таймер в потоке, вам нужно будет создать поток самостоятельно, а затем создать и запланировать таймер в этом потоке. (И тогда вам придется подумать о синхронизации.) –
Да, вы совершенно правы, Питер. Спасибо, что указали. – Yuji