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(); ??? } }
// 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(); }