evtqueue.hpp 637 B

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