Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > iOS > Потоки и общий ресурс - как решить проблему?


Автор: cosamia 7.10.2012, 13:22
У меня есть несколько кнопок, их действия выполняются в отдельных асинхронных потоках;
Есть 1 массив который эти потоки запонляют
По идее, логика такова: нажал на кнопку - заполнил массив. Нажал на другую кнопку - заплнил тот же массив но другими данными.
В этой логике есть недочет: если очень быстро нажимать на кнопки, но массив будет заполняться из разных потоков.
Попробовал решить эту задачу блокированием ресурса - массива используя директиву @synchronized в куске кода где идет заполнение массива
В результате получил следующий результат:
- если кнопки нажимать медленно, то все ок
- если нажимать быстро, то программа вообще вылетает с ошибкой что размерность массива не та...

Массив использую мьютебл и безазмерный


Автор: Bitter 7.10.2012, 15:50
Ну синхронизируйте действия флагами. Нажал на кнопку - если флаг выставлен, то выход, иначе выставить флаг и заполнить данными. По завершении заполнения массива - сбросить флаг

Автор: cosamia 7.10.2012, 16:33
Интерсная идея, попробую...

Автор: Maksys 8.10.2012, 08:07
Попробуйте реализацию синглтона через dispatch_once

Автор: cosamia 8.10.2012, 16:36
Цитата(Maksys @ 8.10.2012,  08:07)
Попробуйте реализацию синглтона через dispatch_once

Спасибо Максис, посмотрю как это сделать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)