2012-04-30 2 views
2

В системах POSIX (Linux и т.д.), когда несколько потоков заблокировать общий семафор - это запорное для того, что это всегда наблюдается, или же приоритет потока смещения темы с более высоким приоритетом при планировании следующего потока в критическом разделе?Мьютексы и приоритеты потоков с относительно планирования на системах POSIX

Означает ли стандарт что-либо о поведении? потому что, насколько я вижу, это только говорит о требуемом интерфейсе.

Пожалуйста, обратите внимание, что я ищу руководство по любой совместимой системе POSIX (не только Linux), так что не стесняйтесь предложить поведение других операционных систем (QNX, Minix и т.д ..)

+0

Используемый системный вызов называется futex (2) (по крайней мере, на linux) –

+0

Насколько я знаю, всякий раз, когда мы пытаемся заблокировать мьютекс или семафор, и являются unsucesfull, эти процессы отправляются в очередь. Каждый семафор/мьютекс имеет очередь. Когда есть приращение переменной семафора, очередь проверяется и вызывается новый процесс на основе алгоритма FIFO (источник Galvin). Поэтому в идеале ответ должен быть заблокирован, но не уверен на 100%. –

ответ

4

Когда несколько потоков Ожидание для блокировки одного и того же мьютекса, когда мьютекс становится доступным, сначала будет разблокирован поток с самым высоким приоритетом. Если несколько потоков имеют один и тот же приоритет, этот поток неблокируется, будет зависеть от используемого алгоритма планирования, например. используя политику FIFO, поток, ожидающий, что самый длинный будет пробужден первым.

Приоритеты нитей и синхронизация - это довольно сложная область, и вам нужно быть очень осторожным, чтобы в конечном итоге вы не перевернули приоритет и не создали тупик.

Глава 5.5 of Butenhof's Программирование в потоках POSIX имеет дело с планированием в реальном времени.

+2

Итак, что вы говорите, так это то, что он полностью основан на заказе FIFO и не связан с приоритетом? –

+0

Нет, я говорю, что приоритет потока является основным фактором, и если несколько потоков имеют одинаковый приоритет, алгоритм планирования определяет, какой поток пробудиться. – TheJuice