#pragma once #include "fiber_cpp_define.hpp" struct ACL_FIBER_COND; namespace acl { class fiber_mutex; /** * 可用在协程之间,线程之间,协程与线程之间的条件变量 */ class FIBER_CPP_API fiber_cond { public: fiber_cond(void); ~fiber_cond(void); /** * 等待条件变量事件被触发 * @param mutex {fiber_mutex&} * @param timeout {int} 超时等待时间(毫秒) * @return {bool} 成功时返回 true,否则返回 false 表示超时 */ bool wait(fiber_mutex& mutex, int timeout = -1); /** * 唤醒在条件变量上的等待者,如果没有等待者则直接返回,运行行为和 * 线程条件变量类似 * @return {bool} 成功返回 true,否则返回 false 表示失败 */ bool notify(void); public: /** * 返回 C 版本的条件变量对象 * @return {ACL_FIBER_COND*} */ ACL_FIBER_COND* get_cond(void) const { return cond_; } private: ACL_FIBER_COND* cond_; fiber_cond(const fiber_cond&); void operator=(const fiber_cond&); }; }