evtqueue.hpp 600 B

123456789101112131415161718192021222324252627282930313233
  1. #pragma once
  2. #include <types/cplusplus.hpp>
  3. #include <types/list.hpp>
  4. #include <types/lock.hpp>
  5. // declaration in kernel/process.hpp
  6. struct thread;
  7. namespace kernel {
  8. class cond_var : public types::non_copyable {
  9. private:
  10. using list_type = types::list<thread*>;
  11. types::mutex m_mtx;
  12. list_type m_subscribers;
  13. public:
  14. cond_var(void) = default;
  15. constexpr types::mutex& mtx(void)
  16. {
  17. return m_mtx;
  18. }
  19. /// @param lock should have already been locked
  20. bool wait(types::mutex& lock);
  21. void notify(void);
  22. void notify_all(void);
  23. };
  24. } // namespace kernel