Назад к вопросам
Middle
97
questionbank
Какие инструменты вы можете использовать для решения проблем синхронизации потоков?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
DispatchGroup: Для ожидания завершения группы асинхронных задач.DispatchSemaphore: Для ограничения количества потоков, одновременно обращающихся к ресурсу.NSRecursiveLock: Позволяет потоку многократно получать блокировку без возникновения взаимной блокировки.NSConditionLock: Блокировка, которая может быть получена только при выполнении заданного условия.OSAtomicfunctions: Низкоуровневые атомарные операции для простых случаев (устарели, предпочтительнее использовать атомарные свойства Swift или C++std::atomic).- @
synchronized: Директива Objective-C для создания критической секции.
// Пример использования DispatchSemaphore для ограничения доступа к ресурсу
import Dispatch
let semaphore = DispatchSemaphore(value: 2) // Разрешаем только 2 потока одновременно
DispatchQueue.global().async {
semaphore.wait() // Уменьшаем счетчик, блокируемся, если 0
print("Поток 1 работает")
sleep(1)
print("Поток 1 завершен")
semaphore.signal() // Увеличиваем счетчик
}
DispatchQueue.global().async {
semaphore.wait()
print("Поток 2 работает")
sleep(1)
print("Поток 2 завершен")
semaphore.signal()
}
DispatchQueue.global().async {
semaphore.wait()
print("Поток 3 работает")
sleep(1)
print("Поток 3 завершен")
semaphore.signal()
}