2013-07-23 4 views
0

Непосредственно из этого website:Обеспечивает ли справедливость планирование FIFO?

Но если мы с указанием параметра справедливости, как «истина», а создания нового объекта ReentrantLock, это дает нам гарантию, что длинный ожидающий поток получит блокировку следующего. Звучит довольно хорошо право?

Я думал, что это никогда не гарантируется, это просто влияет на решение планировщика. Разве это не означает, что сайт на самом деле говорит правду?

Заранее спасибо.

ответ

3

API documentation for ReentrantLock говорит (курсив мой):

Конструктор для этого класса принимает необязательный параметр справедливости. При установке true, в условиях конкуренции блокировки предпочитают предоставление доступа к длинному ожидающему потоку . В противном случае этот замок не гарантирует никакого специального заказа доступа . Программы, использующие справедливые блокировки, к которым обращаются многие потоки , могут отображать более низкую общую пропускную способность (т. Е. Медленнее, часто намного медленнее), чем те, которые используют настройку по умолчанию, но имеют меньшие отклонения от , чтобы получить блокировки и гарантировать отсутствие голодания. Обратите внимание, что справедливость блокировок не гарантирует справедливость планирование потоков. Таким образом, один из многих потоков, использующих справедливую блокировку, может получить его несколько раз подряд, тогда как другие активные потоки не прогрессирует и не удерживает замок. Также обратите внимание, что метод untcled tryLock не соблюдает установку справедливости. Он будет успешным, если блокировка доступна, даже если другие потоки ждут.

Так что, похоже, сайт, который вы цитируете, немного упрощает.