public void Work()
 {
     while (true)
     {
         PrintDistributorMessage("waits for new resource to be produced.");
         SemResourceProduced.Wait();  //wait for new resource
         PrintDistributorMessage("tries to distribute resources.");
         TryDistribute();
         //TODO: SemResourceProduced.Release(); ???
     }
 }
Exemple #2
0
        // private void Consume()
        // {
        //     SemAlchemist.WaitOne();
        //     if(resourceCount > 0)
        //     {
        //         PrintFactoryMessage("is consuming a resource.");
        //         resourceCount--;
        //         SemFreeSlot.Release();
        //         SemAlchemist.Release();
        //     }
        //     else
        //     {
        //         SemAlchemist.Release();
        //     }
        // }

        private void Produce()
        {
            //PrintFactoryMessage("is waiting for a free slot...");
            Warehouse.SemFreeSlot[(int)Resource].WaitOne();  //wait for a free slot

            PrintFactoryMessage("has a free slot. Trying to produce...");
            SemGoodToGo.WaitOne();    //wait for the curses to be purged or continue if clean

            PrintFactoryMessage("is clean. Producing...");
            Thread.Sleep(random.Next(1, 5) * 1000);   //produce over random time duration
            Warehouse.SemWarehouse.WaitOne();
            Warehouse.AvailableResources[(int)Resource]++;
            //signal that there is a resource available
            SemResourceProduced.Release();  //TODO: After or before releasing semwarehouse??
            Warehouse.SemWarehouse.Release();

            PrintFactoryMessage("finished production.");
            SemGoodToGo.Release();
        }