потокобезопасный - PullRequest
       5

потокобезопасный

0 голосов
/ 13 января 2011

У меня есть вопросник, который читается из LOT и в некоторых моментах одновременно записывается в LOT.

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

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

Ответы [ 2 ]

1 голос
/ 13 января 2011

Если у вас есть изменения, которые вы хотите внести в NSMutableDictionary, и вам нужно, чтобы операции выполнялись поточно-ориентированным образом, самый простой способ - обернуть все обращения к этому объекту с помощью оператора @synchronized, который сообщает компилятор для блокировки доступа к объекту потокобезопасным, безопасным для исключения способом:

@synchronized (myDictionary) {
    [myDictionary setObject: ... forKey: ...];
    [myDictionary removeObjectForKey: ...];
}

Существуют более высокопроизводительные альтернативы @synchronized, но это должно быть проблемой, только если вы профилировали свой код и видите, что синхронизация является проблемой.

0 голосов
/ 13 января 2011

один из многих подходов:

создать класс, который содержит соответствующую блокировку и словарь (в частности, я использую шаблоны c ++, которые служат контейнерами). затем оберните интерфейс по мере необходимости. Я сделал это для многих типов CF / NS. это так быстро, как разумно. поскольку вы имеете дело с коллекциями, у вас есть несколько соображений (например, удерживается ли блокировка, когда содержимое изменяется)?

...