Muszę rozwiązać problem palaczy. Ogólnie polega na tym że mamy sędziego który daje palaczem półprodukty i 3 palaczy którzy skręcają z tego papierosy i palą. Potrzebujemy 4 wątków (1 sedzia i 3 palaczy) niestety nie wiem jak to zrobić żeby sędzia budził wątki palaczy (w tym czasie sam zasypia) następnie jeden z palaczy skręca i pali po czym budzi sędziego (i zasypia). Mógłby ktoś mi podpowiedzieć jak to zrobić (oczywiście znam funkcje resume i suspend)?
0
0
Interrupt?
Albo inaczej: sędzia czeka aż palacz skończy, czyli Join.
0
class Palacz
{
int c;
Thread arbiter;
public Palacz(int stu, Thread a)
{
c = stu;
arbiter = a;
}
public void pal(){
while(true){
if(c+Stolik.a+Stolik.b==3){
Console.WriteLine("palacz "+c+"pali papierosa");
Stolik.a=Stolik.b=3;
arbiter.Resume();
}
//Tu chciałbym żeby zasną.
}
}
}
class Agent
{
public static void rzuc()
{
while (true)
{
//int i = 0;
while (true)
{
//i++;
int x = 3;
int y = 3;
Random generator = new Random();
x = generator.Next(-1, 3);
y = generator.Next(-1, 3);
while (x == y)
{
x = generator.Next(-1, 3);
}
Stolik.a = x; Stolik.b = y;
}
}
}
}
Udało mi się napisać taki kod tylko nie wiem jak usypiać arbitra i wszystkich palaczy.
Program do testowania wygląda tak:
public static void Main(String[] args)
{
//Agent s = new Agent();
Thread sedzia = new Thread(Agent.rzuc);
sedzia.Start();
//clientThread.Start(client);
Palacz palacz1 = new Palacz(0, sedzia);
Palacz palacz2 = new Palacz(1, sedzia);
Palacz palacz3 = new Palacz(2, sedzia);
Thread pal1 = new Thread(palacz1.pal);
Thread pal2 = new Thread(palacz2.pal);
Thread pal3 = new Thread(palacz3.pal);
pal1.Start();
pal2.Start();
pal3.Start();
}
0
Chciałbym wymusić zaśnięcie wątków palaczy i sędziego mógłby ktoś podpowiedzieć jak to wykonać?
<sorry za double'a>
0
Ja proponuje zapisać to w formie prostego algorytmu bez wątków (zauważ, że i tak zawsze aktywny byłby tylko 1):
pętla(sędzia) + 3 funkcje(palacze)
Rozwiązanie prostsze i wydajniejsze (nie trzeba marnować czasu procesora na synchronizację wątków)
0
No tak tylko że chciałbym się dowiedzieć jak to się robi na wątkach.