Skip to content
Snippets Groups Projects
Select Git revision
  • 12e02f59e0cfd4ea0413ffefd59be60f2522e26d
  • main default protected
  • Develop
  • Feature-Grafische-Benutzeroberfäche
  • Feature-Terminal-UI
  • Singelton-Testcase
  • feature-MADR
  • Api-Testcases
  • Feature-Rover-API
  • Feature-Rest
  • Feature-Aider-Telescope-Unittest
  • Feature-Aider-Functional-Code
  • Feature-Aider-MissionControl
  • Feature-Aider-Telescope
  • Feature-Aider-Mars
  • Feature-Aider-Rover
  • Feature-Aider-Map
  • Feature-Aider-Plateau
  • Test-Feature-Rückmeldung
  • Test-Feature-Randerkennung
  • Test-Feature-OBS
21 results

plateau.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Consumer.cs 2.39 KiB
    using System;
    using System.Diagnostics.CodeAnalysis;
    using System.Runtime.ConstrainedExecution;
    using System.Threading;
    
    
    namespace ConsoleApplication1
    {
        public class Consumer
        {
            private Buffer _buffer;
            private Random _random;
            private bool _isAsleep;
            private static bool _wakeConsumersUp;
    
            public Consumer(Buffer buffer)
            {
                _buffer = buffer;
                _random = new Random();
            }
            
            [SuppressMessage("ReSharper", "FunctionNeverReturns")]
            public void Consume()
            {
                while (true)
                {
                    //if isAsleep = true: method checks if wakeConsumersUp has been set to true every 50ms
                    if (_isAsleep)
                    {
                        Console.WriteLine("consumer asleep...");
                        Thread.Sleep(50);
    
                        //if wakeConsumersUp = true is asAsleep is set to true and if(isAsleep) "loop" is exited on next iteration
                        if (_wakeConsumersUp)
                        {
                            Console.WriteLine("consumer was woken up");
                            _isAsleep = false;
                        }
                    }
                    //if consumer isnt asleep: consumer gets mutex from buffer, wakes up producers if buffer is full and removes cars if consumer is not empty
                    else
                    {
                        Thread.Sleep(_random.Next(500, 1500));
                        Mutex m = _buffer.GetMutex();
                        m.WaitOne();
    
                        if (_buffer.Full())
                        {
                            Producer.WakeUp();
                        }
                        
                        if (!_buffer.Empty())
                        {
                            Car c = _buffer.Pop();
                            Console.WriteLine("car pulled out of parking space. car id = " + c.getThisCarId());
                        }
    
                        //if buffer is empty: consumers are set to sleep, own instance is set to sleep
                        else
                        {
                            _wakeConsumersUp = false;
                            _isAsleep = true;
                        }
    
                        m.ReleaseMutex();
    
                    }
                }
            }
    
            //this consumer instance can be woken up by calling this method
            public static void WakeUp()
            {
                _wakeConsumersUp = true;
    
            }
        }
    }