Я отлаживаю быстрый класс, унаследованный в проекте. Была предпринята попытка создать потокобезопасный словарь, используя быстрый словарь с семафором. Код не выполняется в многопоточной среде - быстрый словарь обрабатывается как структура и копируется при мутации независимо от семафора.
Я пытаюсь понять: Будет ли замена быстродействующего словаря на основе структур основанием ядра NSMutableDictionary (с семафором) обеспечить потокобезопасность кода?
Я вижу этот ответ для Objective-C , но мой вопрос касается изменения кода swift.
public class ThreadSafeDictionary<KeyType: Hashable, ValueType> {
private var dictionary: [KeyType: ValueType] = [:]
//change to:
private let dictionary = NSMutableDictionary() //will this make the mutating code thread safe?
public func add(key: KeyType, value: ValueType) {
// semaphore wait
// set value in dictionary
// semaphore signal
}
}
Или - есть ли способ использовать ключевые слова swift, такие как mutating или inout , чтобы убедиться, что семафоры не позволят нескольким потокам работать с копией быстрого словаря?
Обновлено: произошла ошибка в коде более высокого уровня, при создании 2 независимых экземпляров ThreadSafeDictionary. Исправление, которое решило проблему параллелизма.