2010-10-15 4 views
3

Как можно реализовать барьер с семафорами в Java. Будет ли работать следующий псевдокод? Как это может быть написано с использованием Java-класса Semaphore.Реализация барьера в Java

N - количество нитей, которые нужно ждать у барьера. EveryoneHasReachedBarrier - условная переменная.

Aquire(mutex) 
m = m + 1; 
if(m != N) 
{ 
    Release(mutex); 
    Aquire(EveryoneHasReachedBarrier); 
} 
else 
{ 
    m = 0; 
    Release(mutex); 
    for(i=0; i<N; i++) 
    { 
     Release(EveryoneHasReachedBarrier); 
    } 
} 
+1

Мы не собираемся делать домашнее задание для вас. Отправьте код, который вы уже написали, и мы поможем. –

ответ

0

1) Ваш псевдокод не использует семафоры, поэтому он не является решением.

2) Это не соответствует тому, как работает примитивный mutex Java/wait/notify.

3) Возможно, это не сработает. Поскольку вы освобождаете мьютекс, прежде чем приобретать условие, существует вероятность состояния гонки. (Не совсем ясно, что это так, потому что семантика ваших «примитивов» открыта для интерпретации.)

Подсказка: вам нужно внимательно прочитать javadocs для класса Semaphore, а затем попытаться отобразить их на проблему, которую вы пытаетесь решить.

+0

спасибо, только один вопрос. можно ли это сделать с помощью одного объекта семафора? – Ajex

+0

@Ajex - так как это домашнее задание, мой ответ таков: «Хороший вопрос. Что ты ** ты думаешь, ответ? Почему бы тебе не попробовать и посмотреть, сможешь ли он работать с одним Семафором?» –

+0

Я думаю, что одна переменная семафора не может отслеживать несколько потоков. Он не знает, к чему все потоки пришли. – Ajex

2

Просто использовать CountDownLatch или CyclicBarrier.

+1

А ... но ОП по существу хочет знать, чтобы реализовать их, используя класс Семафор ... как домашнюю работу. –

+0

Он может посмотреть на источник для этих двух и узнать что-то полезное в этом процессе. – biasedbit

+1

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

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