2013-04-23 4 views

ответ

0

Это будет поток, который планируется выполнить в этом конкретном цикле процессора.

2

В качестве document для sem_post предполагает,

Если значение семафора в результате этой операции равен нулю, то одна из нитей заблокированных ожидающих семафора будет разрешено вернуться успешно из своего позвоните по номеру sem_wait(). Если задан символ _POSIX_PRIORITY_SCHEDULING , то нить, подлежащая разблокировке, будет выбрана способом, соответствующим политикам и параметрам планирования для заблокированных потоков. В случае планировщики SCHED_FIFO и SCHED_RR, поток ожидания с наивысшим приоритетом будет разблокирован , и если существует более одного потока с наивысшим приоритетом, который блокирует ожидающий семафор, то самый высокий приоритет, который был самым длинным, будет разблокировать. Если символ _POSIX_PRIORITY_SCHEDULING не определен, выбор для разблокирования нити не указывается.

Кроме того, как sem_wait определяет в Использование Применение секции, Там могут быть случаи инверсии приоритетов с участием потоков с differemt уровнями приоритета

2
Can multiple threads wait on a single semaphore ? 

Да.

If yes, upon semaphore down which one will be resumed ? 

Ровно один из них. Какой из них зависит от реализации ядра ОС: тип контейнера, который используется для хранения ожидающих потоков. Скорее всего, это очередь FIFO, поэтому первый поток для вызова semaphore.wait() будет выпущен первым, но вы не должны проектировать свое приложение каким-либо образом, которое полагается на это поведение.

+0

На самом деле, это вряд ли будет простым fifo. Как работает планирование в Linux: http://oreilly.com/catalog/linuxkernel/chapter/ch10.html. Этот раздел, в частности: http://oreilly.com/catalog/linuxkernel/chapter/ch10.html#20825 – Ben

Смежные вопросы