Назад к вопросам
МТС
Junior — Middle
65
Каким образом реализовать функцию, гарантирующую атомарность операций в GCD?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для обеспечения атомарности операций в GCD (Grand Central Dispatch) можно использовать синхронизацию через сериализованную очередь или использовать dispatch_barrier_async на конкурентной очереди.
Пример с сериализованной очередью:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
func atomicOperation(_ block: @escaping () -> Void) {
serialQueue.async {
block()
}
}
Вызов atomicOperation гарантирует, что блоки выполняются последовательно, без одновременного доступа к разделяемым ресурсам.
Если используется конкурентная очередь, можно применить барьер:
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)
func atomicWriteOperation(_ block: @escaping () -> Void) {
concurrentQueue.async(flags: .barrier) {
block()
}
}
Барьер гарантирует, что операция выполняется эксклюзивно, блокируя другие задачи на этой очереди во время выполнения блока.