Critical.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include <condition_variable>
  3. #include "Betriebssystem.h"
  4. namespace Framework
  5. {
  6. class Thread;
  7. class Critical
  8. {
  9. private:
  10. CRITICAL_SECTION cs;
  11. Thread* owner;
  12. int lockCount;
  13. int id;
  14. public:
  15. //! Konstructor
  16. DLLEXPORT Critical();
  17. //! Destructor
  18. DLLEXPORT ~Critical();
  19. //! sperrt das Objekt
  20. DLLEXPORT void lock();
  21. //! versucht das Objekt zu sperren
  22. DLLEXPORT bool tryLock();
  23. //! entsperrt das Objekt
  24. DLLEXPORT void unlock();
  25. //! gibt true zurück, wenn das Objekt gesperrt ist
  26. DLLEXPORT bool isLocked() const;
  27. //! gibt einen Zeiger auf den Thread zurück, der das Objekt gesperrt hat
  28. DLLEXPORT const Thread* zOwner() const;
  29. };
  30. class Synchronizer
  31. {
  32. private:
  33. std::condition_variable block;
  34. std::mutex mutex;
  35. int numWaiting;
  36. bool skip;
  37. public:
  38. DLLEXPORT Synchronizer();
  39. DLLEXPORT ~Synchronizer();
  40. DLLEXPORT bool wait();
  41. DLLEXPORT bool wait(int milisec);
  42. DLLEXPORT void notify();
  43. DLLEXPORT void notify(int amount);
  44. DLLEXPORT void notifyAll();
  45. DLLEXPORT int getNumberOfWaitingThreads() const;
  46. };
  47. } // namespace Framework