Может ли несколько потоков ждать на одном семафоре? Если да, то на семафоре, с которого один будет возобновлен?Несколько потоков могут ждать на семафоре одновременно
ответ
Это будет поток, который планируется выполнить в этом конкретном цикле процессора.
В качестве document для sem_post
предполагает,
Если значение семафора в результате этой операции равен нулю, то одна из нитей заблокированных ожидающих семафора будет разрешено вернуться успешно из своего позвоните по номеру
sem_wait()
. Если задан символ_POSIX_PRIORITY_SCHEDULING
, то нить, подлежащая разблокировке, будет выбрана способом, соответствующим политикам и параметрам планирования для заблокированных потоков. В случае планировщикиSCHED_FIFO
иSCHED_RR
, поток ожидания с наивысшим приоритетом будет разблокирован , и если существует более одного потока с наивысшим приоритетом, который блокирует ожидающий семафор, то самый высокий приоритет, который был самым длинным, будет разблокировать. Если символ_POSIX_PRIORITY_SCHEDULING
не определен, выбор для разблокирования нити не указывается.
Кроме того, как sem_wait
определяет в Использование Применение секции, Там могут быть случаи инверсии приоритетов с участием потоков с differemt уровнями приоритета
Can multiple threads wait on a single semaphore ?
Да.
If yes, upon semaphore down which one will be resumed ?
Ровно один из них. Какой из них зависит от реализации ядра ОС: тип контейнера, который используется для хранения ожидающих потоков. Скорее всего, это очередь FIFO, поэтому первый поток для вызова semaphore.wait() будет выпущен первым, но вы не должны проектировать свое приложение каким-либо образом, которое полагается на это поведение.
- 1. Для многих потоков, ожидающих на семафоре
- 2. запускать несколько потоков одновременно
- 3. Apache NiFi: Вывод на несколько потоков одновременно?
- 4. Несколько потоков одновременно работают в JAVA
- 5. Несколько потоков записи в одном буфер одновременно
- 6. Проблема в семафоре прерывается несколько раз
- 7. Одновременно слушать несколько потоков в службе
- 8. Как запустить несколько потоков одновременно в C#?
- 9. Можно ли несколько потоков ждать на одном объекте?
- 10. Запуск нескольких потоков одновременно
- 11. Несколько потоков, записываемых в коллекцию одновременно
- 12. SQL ячейки таблицы модифицирована несколько потоков одновременно
- 13. Gstreamer не воспроизводит несколько потоков одновременно
- 14. Несколько потоков и булевский регистр
- 15. Python: как много потоков ждать на событии?
- 16. Может ли несколько потоков одновременно использовать разделяемую память?
- 17. Множественные потоки нерест несколько потоков и как ждать ребенка Нитки
- 18. Может ли несколько потоков записывать данные в файл одновременно?
- 19. о семафоре в Linux
- 20. Запустить несколько потоков Одновременный
- 21. Найти количество блокировок задач на семафоре POSIX
- 22. .NET - Несколько экземпляров таймеров означают несколько потоков?
- 23. Выполнение двух потоков одновременно
- 24. выполнение нескольких потоков одновременно
- 25. Запуск нескольких потоков одновременно
- 26. Несколько потоков и памяти
- 27. Основная нить ждать других потоков
- 28. ASP.NET MVC несколько потоков доступ к базе данных одновременно
- 29. несколько потоков, выполняющих записи?
- 30. Как запустить несколько потоков и ждать полного их завершения
На самом деле, это вряд ли будет простым fifo. Как работает планирование в Linux: http://oreilly.com/catalog/linuxkernel/chapter/ch10.html. Этот раздел, в частности: http://oreilly.com/catalog/linuxkernel/chapter/ch10.html#20825 – Ben