Cześć!
0
0
public void dodajDoMagazynuElementA(){
semaforA.PB();
dodajDoMagazynuElement("A");
semaforA.PB();
semaforB.VB();
}
Nie rozumiem. Dlaczego dwa razy "semaforA.PB();" ?
Z tego co widzę, to stosujesz naprzemiennie semafory w dwóch znaczeniach. Do rozwiązania tego problemu potrzeba więcej semaforów. Niektóre wątki muszą czekać aż element X się pojawi, ale producent X musi czekać, aż X zostanie wzięty z magazynu.
Na przyszłość jeszcze jedna dobra rada - prawdopodobieństwo, że ktoś udzieli pomocnej odpowiedzi jest odwrotnie proporcjonalne do długości posta. Lepiej więc wyodrębnić problem i napisać jak najmniej kodu.