Thread.cppm 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. module;
  2. #include <atomic>
  3. #include <mutex>
  4. #include <thread>
  5. export module Core.Thread;
  6. export namespace std {
  7. using std::atomic_bool;
  8. }
  9. export namespace Core {
  10. class Mutex final {
  11. std::mutex mutex{};
  12. public:
  13. void lock() noexcept;
  14. void unlock() noexcept;
  15. };
  16. class MutexGuard {
  17. Mutex& mutex;
  18. public:
  19. MutexGuard(Mutex& m) noexcept;
  20. MutexGuard(const MutexGuard&) = delete;
  21. MutexGuard(MutexGuard&&) = delete;
  22. ~MutexGuard() noexcept;
  23. MutexGuard& operator=(const MutexGuard&) = delete;
  24. MutexGuard& operator=(MutexGuard&&) = delete;
  25. };
  26. class Thread final {
  27. std::thread thread;
  28. public:
  29. using Function = void (*)(void*);
  30. Thread() noexcept;
  31. Thread(const Thread& other) = delete;
  32. Thread(Thread&& other) noexcept;
  33. ~Thread() noexcept;
  34. Thread& operator=(const Thread& other) = delete;
  35. Thread& operator=(Thread&& other) noexcept;
  36. void swap(Thread& other) noexcept;
  37. bool start(Function f, void* p) noexcept;
  38. bool join() noexcept;
  39. };
  40. }