private void Dispose() { ClearThreads(); _parallelThreads = _parallelThreads.DisposeExchange(); _executionPathQueueBuilder = _executionPathQueueBuilder.DisposeExchange(); _currentThread.Dispose(this); _currentThread = Thread.Empty; _executionMethods = null; _partialRun = false; Context.ProcessField = DummyProcess; Context = null; _processResources = null; _automata.ReleaseProcess(this); }
internal void Initialize(IInstructionReader instructionReader, AutomataContext context) { if (ReferenceEquals(context.ProcessField, DummyProcess) == false) { throw new InvalidOperationException("Context is busy"); } _processResources = ProcessResources.ThreadLocalInstance.Value; _executionPathQueueBuilder = _processResources.ExecutionPathGroupBuilderPool.Get().AddReference(); _parallelThreads = _processResources.ThreadListPool.Get().AddReference(); _executionMethods = _automata.GetExecutionMethods(context); Context = context; Context.ProcessField = this; var entryPoint = context.EntryPoint; if (!(entryPoint is FiniteState state)) { return; } var instructionQueue = _processResources.InstructionQueuePool.Get().Mount(instructionReader, _automata); _entryPointSubGraph = _automata.EnsureSubGraph(state); var initNode = _entryPointSubGraph.InitNode; if (initNode.Safe == false) { initNode.MakeSafe(); } _currentThread = new Thread(initNode, instructionQueue, context.CreateContextStateInternal()) { Stack = _processResources.StackPool.Get().AddReference(), ExecutionQueue = _processResources.ExecutionPathPool.Get().AddReference(), PredicateResultQueue = _processResources.PredicateResultPool.Get().AddReference() }; }
static void Main(string[] args) { Console.ForegroundColor = ConsoleColor.White; Console.BackgroundColor = ConsoleColor.DarkBlue; Farm Trestlebridge = new Farm(); while (true) { DisplayBanner(); Console.WriteLine("1. Create Facility"); Console.WriteLine("2. Purchase Animals"); Console.WriteLine("3. Purchase Seeds"); Console.WriteLine("4. Display Farm Status"); Console.WriteLine("5. Process Resources"); Console.WriteLine("6. Exit"); Console.WriteLine(); Console.WriteLine("Choose a FARMS option"); Console.Write("> "); string option = Console.ReadLine(); if (option == "1") { DisplayBanner(); CreateFacility.CollectInput(Trestlebridge); } else if (option == "2") { DisplayBanner(); PurchaseStock.CollectInput(Trestlebridge); } else if (option == "3") { DisplayBanner(); PurchaseSeed.CollectInput(Trestlebridge); } else if (option == "4") { DisplayBanner(); Console.WriteLine(Trestlebridge); Console.WriteLine("\n\n\n"); Console.WriteLine("Press return key to go back to main menu."); Console.ReadLine(); } else if (option == "5") { DisplayBanner(); ProcessResources.CollectInput(Trestlebridge); } else if (option == "6") { Console.WriteLine("Today is a great day for farming"); break; } else { Console.WriteLine($"Invalid option: {option}"); } } }