예제 #1
0
        public void Consume()
        {
            //for (int i = 1; i <= 11; i++)
            while (true)
            {
                lock (common_lock)
                {
                    //Console.Write("Consumer1 Chnace ");
                    //Console.Write(" f1=" + cnum.Flag1 + " f2=" + cnum.flag2 + " seq=" + cnum.seq + " p =" + cnum.p);

                    if (cnum.p == 3 || cnum.p == 4 || cnum.p == 1 || cnum.p == 5 || (cnum.Flag1 && !cnum.flag2 && !cnum.flag3))
                    {
                        //  Console.Write(" Consumer1 wating ");
                        Monitor.PulseAll(common_lock);
                        Monitor.Wait(common_lock);
                    }
                    else
                    {
                        Console.Write("\t  " + (cnum.getNum() % 2 == 0));
                        cnum.Flag1 = true;
                        cnum.flag2 = false;
                        cnum.p     = 3;
                    }
                }
            }
        }
예제 #2
0
        public void Generate()
        {
            int count = 1;

            //for (int i = 1; i <= 11; i++)
            while (true)
            {
                lock (common_lock)
                {
                    //  Console.Write("Produce Chnace ");
                    //Console.Write(" f1=" + cnum.Flag1 + " f2=" + cnum.flag2 + " seq=" + cnum.seq + " p =" + cnum.p);
                    if (cnum.p == 2 || cnum.p == 3 || cnum.p == 4 || cnum.p == 5 || (!cnum.Flag1 && !cnum.flag2 && !cnum.flag3))
                    {
                        //   Console.Write(" producer wating ");
                        Monitor.PulseAll(common_lock);
                        Monitor.Wait(common_lock);
                    }
                    else
                    {
                        cnum.setNum(count);
                        if (count == 11)
                        {
                            Console.ReadKey();
                            Environment.Exit(0);
                        }
                        Console.Write("\n " + cnum.getNum());
                        count      = count + 1;
                        cnum.Flag1 = false;
                        cnum.p     = 2;
                    }
                }
            }
        }
예제 #3
0
        public void Consume()
        {
            //  for (int i = 1; i <= 11; i++)
            while (true)
            {
                lock (common_lock)
                {
                    //Console.Write("Consumer3 Chnace ");
                    //Console.Write(" f1=" + cnum.Flag1 + " f2=" + cnum.flag2 + " seq=" + cnum.seq + " p =" + cnum.p);

                    if (cnum.p == 1 || cnum.p == 2 || cnum.p == 3 || cnum.p == 5 || (!cnum.Flag1 && !cnum.flag2 && cnum.flag3))
                    {
                        // Console.Write(" Consumer2 wating ");
                        Monitor.PulseAll(common_lock);
                        Monitor.Wait(common_lock);
                    }
                    else
                    {
                        //Console.Write("\t consume3 " + cnum.getNum());
                        int  n     = cnum.getNum();
                        bool prime = true;

                        for (int i = 2; i <= n / 2; i++)
                        {
                            if (n % i == 0)
                            {
                                prime = false; break;
                            }
                        }
                        if (n == 1)
                        {
                            prime = false;
                        }


                        Console.Write("\t  " + prime);

                        cnum.Flag1 = false;
                        cnum.flag2 = true;
                        cnum.p     = 5;
                    }
                }
            }
        }
예제 #4
0
        public void Consume()
        {
            //  for (int i = 1; i <= 11; i++)
            while (true)
            {
                lock (common_lock)
                {
                    //Console.Write("Consumer4 Chnace ");
                    //Console.Write(" f1=" + cnum.Flag1 + " f2=" + cnum.flag2 + " seq=" + cnum.seq + " p =" + cnum.p);

                    if (cnum.p == 1 || cnum.p == 2 || cnum.p == 3 || cnum.p == 4 || (cnum.Flag1 && !cnum.flag2 && cnum.flag3))
                    {
                        // Console.Write(" Consumer4 wating ");
                        Monitor.PulseAll(common_lock);
                        Monitor.Wait(common_lock);
                    }
                    else
                    {
                        int a = 0, b = 1, c, n = cnum.getNum(); bool fab = false;
                        for (int i = 1; i <= n; i++)
                        {
                            c = a + b; a = b; b = c;
                            if (c == n)
                            {
                                fab = true;
                            }
                        }
                        Console.Write("\t    " + fab);

                        cnum.Flag1 = true;
                        cnum.flag2 = true;
                        cnum.flag3 = true;
                        cnum.p     = 1;
                    }
                }
            }
        }