Rozwiązanie oparte na semaforach w JDK 5.0

0
  1. Czy dysponuje ktoś kodem w Javie rozwiązującym problem wielu konsumentów i producentów oraz 1-elementowy bufor (semafory licznikowe lub binarne)?
  2. Czy dysponuje ktoś kodem w Javie realizującym barierę n-wątkową (semafory licznikowe)?

Chodzi mi o rozwiązanie oparte na semaforach dostępnych w JDK 5.0. Szukałem w Google, lecz bez efektu.

0

Szukałem, nie ma tam gotowca.

0

Heh, pewnie nie rozumiem o co chodzi w zadaniach (współbieżność i problemy tych jakichś konsumentów miałem dawno temu), ale ja widzę jakieś gotowce.

Ad 1. SynchronousQueue<E> - kolejka o długości zero. Podczas pobierania elementu można wybrać metodę która czeka aż inny wątek będzie wkładał element.

Ad 2. Klasa Semaphore jest chyba semaforem licznikowym.

0

AD 1. Napisano: W rozwiązaniu zastosuj semafory dostępne w JDK 5.0</quote>
Więc nie wiem czy mogę skorzystać z SynchronousQueue, to nie semafory.

AD 2. No jest semaforem licznikowym, ale to nie gotowiec rozwiązania problemu :) W sumie najłatwiej byłoby skorzystać z CyclicBarrier, no ale semafory licznikowe to semafory licznikowe.

PS. Przykładowy szkiellet dla kosnumenta:

process Konsument[i = 1 to LK] {
while (true) {
PB(full); // czekaj az pełny
data=bufPobierz(); // pobierz z bufora
VB(empty); // sygnalizuj pusty bufor
... // konsumuj dane
}
}

Jak zrealizować tę linię kodu:

process Konsument[i = 1 to LK] 

z resztą sobie poradzę...
Ma być to pętla? Lista konsumentów?

0

Podejrzewam że chodzi o wątki, tzn rozszerz klasę Thread, w metodzie run() daj tą pętlę while(true) i wystartuj wszystkie wątki naraz. Tak mi się tylko wydaje :)

0

Chyba dobrze ci się wydaje, dzięki za wskazówkę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1