2012-05-21 2 views
0

Рассмотрим следующее использование:Использование двоичного семафора как Mutex - это голодание бесплатно?

Shared data: semaphore lock; // initially lock = 1 
... 
down(lock); 
CRITICAL SECTION 
up(lock); 

делает этот код удовлетворяет свободу голодание (т.е. если процесс ожидает, чтобы попасть внутрь КС, это удастся в конце концов)?

+0

Похоже, что вы вставили псевдокод. Какой «семафор» - это «замок»? Что такое 'down' и' up'? – ArjunShankar

+0

@ArjunShankar: Я бы предположил, что 'down' и' up' являются стандартными операциями, которые один связывает с семафором. –

+0

В любом случае, предполагая, что 'down (lock)' является способом получения эксклюзивного доступа, это действительно зависит от того, справедливо ли «down (lock)». то есть, если на нем ожидают несколько потоков, какова логика, которая решает, кто из них побеждает. – ArjunShankar

ответ

1

Это действительно зависит от политики, используемой при выборе потока, когда несколько потоков ждут down(lock).

например.

  1. Если эта политика основана на очереди, вы гарантированно будете голодать бесплатно.
  2. Если один из нескольких потоков ожидания выбран произвольно, то вы можете голодать от чистой неудачи.
  3. Если он основан на приоритете, то потоки с низким приоритетом будут голодать до тех пор, пока высокоприоритетные сохраняют запрос на блокировку.

Например, подсчет Java Semaphore при создании может быть настроен как «справедливый» или нет. Здесь «справедливость» относится к тому факту, что ожидающие потоки будут помещены в FIFO, так что сначала будут выполняться нити, ожидающие наибольшего времени.