Каково число согласия для семафоров?

Вы уверены, что вам нужен класс?

Может быть, достаточно простого объявления поля:

   public class ABC extends CDE implements EFG {
        public String testValue;
        public String anotherValue;


        public void firstMethod(String valueOne, String valueTwo) {
             // do whatever you wish with testValue and anotherValue
        }

        public void readMethod() {        
            // here you have access to both variables        
        }

    }
13
задан Giovanni Funchal 22 April 2009 в 09:47
поделиться

3 ответа

Консенсус-число для мьютекса будет равно 1. Тривиально ясно, что мьютекс будет без ожидания для одного потока. Из его определения также ясно, что мьютекс больше не ждет ожидания для двух потоков. Следовательно, число консенсуса равно> = 1 и <2, поэтому оно должно быть 1.

Аналогично, другие механизмы синхронизации, которые работают путем остановки одного потока в пользу другого, также имеют консенсус номер 1 и, следовательно, не могут использоваться для построения объект без ожидания, общий для двух потоков.

10
ответ дан 1 December 2019 в 23:48
поделиться

Бесконечно, конечно? Но они не ждут на свободе.

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

Атомное test-and-set имеет согласованное число 2, но не блокирует.


Чтобы уточнить: семафоры, мьютексы и т. Д. Являются примитивами, которые можно просто обернуть вокруг общего ресурса, чтобы сделать его безопасным (если вы делаете это правильно). Они могут блокировать, но они гарантируют, что ваши данные в безопасности.

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

3
ответ дан 1 December 2019 в 23:48
поделиться

From this article alone you can conclude that a semaphore must have a consensus number less than or equal to 2. Here's why:

On the third page of the article they state: "The fetch&add operation is quite flexible: it can be used for semaphores...". Since we know that fetch&add has consensus number equal to 2, Theorem 1 of that paper can then be used to show that a semaphore must have consensus number less than or equal to 2. The proof goes like this:


Proof

Assume that a wait-free implementation of semaphores by fetch&add exists. Further assume that a semaphore has consensus number greater than 2. We know that fetch&add has a consensus number of 2. From Theorem 1 we can conclude that there exists no wait-free implementation of a semaphore by fetch&add in a system of more than 2 processes. This contradicts the assumption that an implementation by fetch&add exists. Therefore, a semaphore must have a consensus number less than or equal to 2.

QED

-1
ответ дан 1 December 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: