Я хотел бы эффективно реализовать это поведение:
Функция запрошена (пользователем).Зная, что эта функция также автоматически повторно вызывается таймером, я хотел бы убедиться, что функция возвращается всякий раз, когда она уже запущена.
В псевдокоде:
var isRunning = false
func process() {
guard isRunning == false else { return }
isRunning = true
defer {
isRunning = false
}
// doing the job
}
Яизвестно о концепции семафора:
let isRunning = DispatchSemaphore(value: 1)
func process() {
// *but this blocks and then passthru rather than returning immediately if the semaphore count is not zero.
isRunning.wait()
defer {
isRunning.signal()
}
// doing the job
}
Как бы вы использовали семафор для реализации этого поведения с семафором ИЛИ любым другим решением?