public void vásárol() /* vásárló szemaforja a tele */ { int kenyér; while (nyitva) { //down(&tele); /*tele csökken, ha előtte>0, mehet tovább*/ bolt1.tele.WaitOne(); //down(&szabad); /*Piszkálhatjuk-e a pékség polcát? */ bolt1.szabad.WaitOne(); //kenyér = kenyér_polcról(); /* Igen, levesszük a kenyeret. */ bolt1.kenyér_polcról_le(); // Az ablakban csak a kenyér számot módosítjuk!!!! if (this.kenyerek_száma.InvokeRequired) { // Másik szál, kell az Invoke hívás. kenyérszám_hívás d = new kenyérszám_hívás(kenyérszám_állítás); this.Invoke (d, new object[] { bolt1.Darab.ToString() }); } else { // Azonos szál, nem kell Invoke this.kenyerek_száma.Text = bolt1.Darab.ToString() + " (Nincs Invoke)"; } //kenyerek_száma.Text = bolt1.Darab.ToString(); //up(&szabad); /* Elengedjük a pékség polcát. */ bolt1.szabad.Release(); //up(&üres); /* Jelezzük péknek, van hely, lehet sütni. */ bolt1.üres.Release(); //kenyér_elfogyasztása(kenyér); // itt csinálhatnánk valamit kenyér = 0; // megettem Thread.Sleep(1300); } }
// // A megjegyzésekben olvashatók a klasszikus algoritmus hívások (down, up) // Ezek a .NET FrameWorkben más névre hallgatnak... // public void pék_süt() /* N értéke a „kenyerespolc” mérete */ { //kenyérbolt b = bolt as kenyérbolt; int kenyér; while (nyitva) { kenyér = 1; //pék_süt(); 1= kenyér megsült //down(&üres); /* üres csökken, ha előtte>0, mehet tovább*/ bolt1.üres.WaitOne(); //down(&szabad); /* Piszkálhatjuk-e a pékség polcát? */ bolt1.szabad.WaitOne(); //kenyér_polcra(kenyér); /* Igen, betesszük a kenyeret. */ bolt1.kenyér_polcra(); // Az ablakban csak a kenyér számot módosítjuk!!!! if (this.kenyerek_száma.InvokeRequired) { // Másik szál, kell az Invoke hívás kenyérszám_hívás d = new kenyérszám_hívás(kenyérszám_állítás); this.Invoke (d, new object[] { bolt1.Darab.ToString() }); } else { // Azonos szál, nem kell Invoke this.kenyerek_száma.Text = bolt1.Darab.ToString() + " (Nincs Invoke)"; } //kenyerek_száma.Text = bolt1.Darab.ToString(); //up(&szabad); /* Elengedjük a pékség polcát. */ bolt1.szabad.Release(); //up(&tele); /* Jelezzük vásárlónak, van kenyér. */ bolt1.tele.Release(); Thread.Sleep(600); /* cigarettaszünet */ } }