Esempio n. 1
0
        static Paleczka[] paleczki = new Paleczka[5];   //obiekty-paleczki w liczbie 5, czyli tyle ile filozofow

        public Form1()
        {
            InitializeComponent();


            for (int i = 0; i < 5; i++)         //stworzenie paleczek
            {
                paleczki[i] = new Paleczka(i);
            }

            Thread F1 = new Thread(() => Mysl(1, ref paleczki[0], ref paleczki[1], 0));  //tworzenie watkow, odpowiadajacych za cykl zycia kazdego z 5 filozofow

            F1.Start();

            Thread F2 = new Thread(() => Mysl(2, ref paleczki[1], ref paleczki[2], 0));

            F2.Start();

            Thread F3 = new Thread(() => Mysl(3, ref paleczki[2], ref paleczki[3], 0));

            F3.Start();

            Thread F4 = new Thread(() => Mysl(4, ref paleczki[3], ref paleczki[4], 0));

            F4.Start();

            Thread F5 = new Thread(() => Mysl(5, ref paleczki[4], ref paleczki[0], 0));

            F5.Start();
        }
Esempio n. 2
0
        private void Mysl(int ID, ref Paleczka Prawa, ref Paleczka Lewa, int ilerazyjadl) //Watek filozfa
        {
            while (!czykoniec)                                                            //jezeli nie kliknieto przycisku "STOP"
            {
                Console.WriteLine("Filozof numer" + ID + " mysli");
                AktualizacjaTekstu(ID, "Filozof numer" + ID + " mysli"); //wypisanie komunikatu w oknie programu i konsoli
                AktualizacjaLicznika(ID, ilerazyjadl.ToString());        //wypisanie stanu licznika zjedzonych ziarenek ryzu
                Thread.Sleep(rand.Next(200, 400));                       //uspienie watku na mniej niz 0,5 sekundy

                if (ID <= 4)                                             //jezeli to filozof o ID od 1 do 4 to
                {
                    if (Prawareka(ref Prawa, ID))                        //proba podniesienia prawej paleczki
                    {
                        Console.WriteLine("Podniesiono prawa paleczke");
                        AktualizacjaTekstu(ID, "Podniesiono prawa paleczke"); //podniesiono paleczke, wypisanie komunikatu

                        if (Lewareka(ref Lewa, ID))                           //proba podniesienia lewej paleczki
                        {
                            Console.WriteLine("Filozof numer" + ID + " je");
                            AktualizacjaTekstu(ID, "Filozof numer" + ID + " je"); //spozycie ziarenka ryzu
                            ilerazyjadl++;
                            AktualizacjaLicznika(ID, ilerazyjadl.ToString());     //inkrementacja licznika i wypisanie aktualnego stanu
                            Thread.Sleep(rand.Next(200, 400));                    //uspienie watku na mniej niz 0,5 sekundy
                            Lewa.Odloz();                                         //odlozenie najpierw lewej paleczki, potem lewej, aby uniknac zakleszczenia
                            Prawa.Odloz();
                            Console.WriteLine("Odłożono pałeczki");
                            AktualizacjaTekstu(ID, "Odłożono pałeczki");  //wypisanie stosownego komunikatu
                        }
                        else //jezeli nie podniesiono lewej paleczki
                        {
                            Thread.Sleep(rand.Next(200, 400)); //uspienie watku i proba druga
                            if (Lewareka(ref Lewa, ID))
                            {
                                Console.WriteLine("Filozof numer" + ID + " je");
                                AktualizacjaTekstu(ID, "Filozof numer" + ID + " je"); //spozycie ziarenka ryzu
                                ilerazyjadl++;
                                AktualizacjaLicznika(ID, ilerazyjadl.ToString());     //inkrementacja licznika i wypisanie aktualnego stanu
                                Thread.Sleep(rand.Next(200, 400));                    //uspienie watku na mniej niz 0,5 sekundy
                                Lewa.Odloz();                                         //odlozenie najpierw lewej paleczki, potem prawej, aby uniknac zakleszczenia
                                Prawa.Odloz();
                                Console.WriteLine("Odłożono pałeczki");
                                AktualizacjaTekstu(ID, "Odłożono pałeczki"); //wypisanie stosownego komunikatu
                            }
                            else //jezeli nie podniesiono lewej paleczki w drugiej probie
                            {
                                Console.WriteLine("Odłożono prawa pałeczke");
                                AktualizacjaTekstu(ID, "Odłożono prawa pałeczke"); //wypisanie stosownego komunikatu
                                Prawa.Odloz();                                     //odlozenie prawej paleczki
                            }
                        }
                    }
                }
                else //jezeli to filozof o ID równym 5 to
                {
                    if (Lewareka(ref Lewa, ID)) //proba podniesienia lewej paleczki
                    {
                        Console.WriteLine("Podniesiono lewa paleczke");
                        AktualizacjaTekstu(ID, "Podniesiono lewa paleczke"); //wypisanie stosownego komunikatu

                        if (Prawareka(ref Prawa, ID))                        //proba podniesienia prawej paleczki
                        {
                            Console.WriteLine("Filozof numer" + ID + " je");
                            AktualizacjaTekstu(ID, "Filozof numer" + ID + " je"); //spozycie ziarenka ryzu
                            ilerazyjadl++;
                            AktualizacjaLicznika(ID, ilerazyjadl.ToString());     //inkrementacja licznika i wypisanie aktualnego stanu
                            Thread.Sleep(rand.Next(200, 400));                    //uspienie watku na mniej niz 0,5 sekundy
                            Prawa.Odloz();                                        //odlozenie najpierw prawej paleczki, potem lewej, aby uniknac zakleszczenia
                            Lewa.Odloz();
                            Console.WriteLine("Odłożono pałeczki");
                            AktualizacjaTekstu(ID, "Odłożono pałeczki");  //wypisanie stosownego komunikatu
                        }
                        else
                        {
                            Thread.Sleep(rand.Next(200, 400)); //uspienie watku i druga proba podniesienia prawej paleczki
                            if (Prawareka(ref Prawa, ID))
                            {
                                Console.WriteLine("Filozof numer" + ID + " je");
                                AktualizacjaTekstu(ID, "Filozof numer" + ID + " je"); //spozycie ziarenka ryzu
                                ilerazyjadl++;
                                AktualizacjaLicznika(ID, ilerazyjadl.ToString());     //inkrementacja licznika i wypisanie aktualnego stanu
                                Thread.Sleep(rand.Next(200, 400));                    //uspienie watku na mniej niz 0,5 sekundy
                                Prawa.Odloz();                                        //odlozenie najpierw prawej paleczki, potem lewej, aby uniknac zakleszczenia
                                Lewa.Odloz();
                                Console.WriteLine("Odłożono pałeczki");
                                AktualizacjaTekstu(ID, "Odłożono pałeczki");  //wypisanie stosownego komunikatu
                            }
                            else //nie podniesieno prawej paleczki w drugiej probie
                            {
                                Console.WriteLine("Odłożono prawa pałeczke");
                                AktualizacjaTekstu(ID, "Odłożono prawa pałeczke"); //stosowny komunikat
                                Lewa.Odloz();                                      //odlozenie lewej paleczki
                            }
                        }
                    }
                }
            }

            AktualizacjaTekstu(ID, " Odszedl od stolu"); //jezeli kliknieto "STOP", a wątek zakończył pracę to nastepuje wypisanie stosownego komunikatu
        }
Esempio n. 3
0
 private bool Lewareka(ref Paleczka Lewa, int ID)  //funkcja podniesienia lewej paleczki
 {
     return(Lewa.Podnies(ID));
 }
Esempio n. 4
0
 private bool Prawareka(ref Paleczka Prawa, int ID) //funkcja podniesienia prawej paleczki
 {
     return(Prawa.Podnies(ID));
 }