Когда dispatch_semaphore_wait
работает с таймаутом, автоматически ли он сам сигнализирует (увеличивать счет) или это нужно сделать вручную?Сигнал семафора отправки по времени ожидания ожидания
4
A
ответ
8
dispatch_semaphore_wait()
уменьшает счетный семафор и ждет , если результирующее значение меньше нуля. Если происходит тайм-аут, это декремент отменяется, поэтому вам не нужно вручную корректировать счет.
Это не очевидно (из-за меня) из документации, но соответствует факту, что отрицательный счет указывает, что потоки ждут на семафоре . Смотрите также этот комментарий в the source code:
// If the internal value is negative, then the absolute of the value is
// equal to the number of waiting threads. ...
Вы также можете проверить это, напечатав debugDescription
в семафора, выход показывает текущее значение:
let sem = dispatch_semaphore_create(0)
NSLog("%@", sem.debugDescription)
// <OS_dispatch_semaphore: semaphore[0x100514a70] = { ..., value = 0, orig = 0 }>
// --> Initial value is 0
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(NSEC_PER_SEC)),
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
NSLog("%@", sem.debugDescription)
// <OS_dispatch_semaphore: semaphore[0x100514a70] = { ..., value = -1, orig = 0 }>
// --> One thread is waiting, value is -1.
}
let ret = dispatch_semaphore_wait(sem, dispatch_time(DISPATCH_TIME_NOW, 2*Int64(NSEC_PER_SEC)))
NSLog("%@", sem.debugDescription)
// <OS_dispatch_semaphore: semaphore[0x100514a70] = { ..., value = 0, orig = 0 }>
// --> Time out, value is 0 again.
Смежные вопросы
- 1. C++ Синхронизация по времени ожидания
- 2. Magento 1.8: Блокировка времени ожидания ожидания ожидания, когда клиент проверяет
- 3. Задание времени ожидания ожидания по умолчанию в .NET named pipes
- 4. Увеличение времени ожидания/ожидания до нужного значения
- 5. Ошибка выполнения ожидания ожидания ожидания ожидания
- 6. Как реализовать псевдокод «работа» ожидания/сигнала (семафора)?
- 7. Предел времени ожидания MODX
- 8. hibernate Задержка ожидания ожидания ожидания ожидания;
- 9. Время ожидания нерабочего времени
- 10. UploadOperation ограничения времени ожидания
- 11. Ожидания расчета времени списка
- 12. NSMutableURLRequest интервал времени ожидания
- 13. установка времени ожидания на dispatch_group
- 14. hook, который обрабатывает время ожидания ожидания ожидания ожидания
- 15. HTTP-запрос времени ожидания клиента по умолчанию
- 16. локона повторить попытку по истечению времени ожидания
- 17. Как разрешить время ожидания ожидания ожидания ожидания ожидания ожидания в SQL?
- 18. Время ожидания ожидания Azure SQL
- 19. Selenium + Java | Улучшение времени ожидания
- 20. Время ожидания ожидания ожидания ожидания превышено с одним запущенным запросом
- 21. MySQL, индексы и «Время ожидания ожидания ожидания ожидания превышено»
- 22. READ COMMITTED время ожидания ожидания ожидания ожидания превышено
- 23. C# HttpWebRequest Установка времени ожидания
- 24. Игнорировать время ожидания ожидания ожидания в CasperJS
- 25. Как обработать прерывание ожидания ожидания ожидания правильно?
- 26. System Verilog- ожидания ожидания
- 27. Получение времени ожидания подключения: connect
- 28. Исключение времени ожидания ActiveVOS BPEL
- 29. Семафоры: Вы можете подать сигнал до ожидания?
- 30. Необъяснимый запрос времени ожидания «Ожидание»