acl  3.5.3.0
fiber_event.hpp
浏览该文件的文档.
1 #pragma once
2 #include "fiber_cpp_define.hpp"
3 
4 struct ACL_FIBER_EVENT;
5 
6 namespace acl {
7 
8 /**
9  * 可用于协程之间、线程之间以及协程与线程之间,通过事件等待/通知方式进行同步的
10  * 的事件混合锁
11  */
13 {
14 public:
15  /**
16  * 构造方法
17  * @param use_mutex {bool} 在用在多线程之间进行事件同步时,如果启动的
18  * 的线程数较多(成百上千个线程),则此标志应设为 true 以便于内部在
19  * 同步内部对象时使用线程互斥锁进行保护,以避免形成惊群现象,如果启动
20  * 的线程数较多但该标志为 false,则内部使用原子数进行同步保护,很容易
21  * 造成惊群问题;当启动的线程数较(几十个左右),则此参数可以设为 false
22  * 以告之内部使用原子数进行同步保护
23  * @param fatal_on_error {bool} 内部发生错误时是否直接崩溃,以便于开发
24  * 人员进行错误调试
25  */
26  fiber_event(bool use_mutex = true, bool fatal_on_error = true);
27  ~fiber_event(void);
28 
29  /**
30  * 等待事件锁
31  * @return {bool} 返回 true 表示加锁成功,否则表示内部出错
32  */
33  bool wait(void);
34 
35  /**
36  * 尝试等待事件锁
37  * @return {bool} 返回 true 表示加锁成功,否则表示锁正在被占用
38  */
39  bool trywait(void);
40 
41  /**
42  * 事件锁拥有者释放事件锁并通知等待者
43  * @return {bool} 返回 true 表示通知成功,否则表示内部出错
44  */
45  bool notify(void);
46 
47 public:
48  /**
49  * 返回 C 版本的事件对象
50  * @return {ACL_FIBER_EVENT*}
51  */
53  {
54  return event_;
55  }
56 
57 private:
58  ACL_FIBER_EVENT* event_;
59 
60  fiber_event(const fiber_event&);
61  void operator=(const fiber_event&);
62 };
63 
64 } // namespace acl
65 
#define FIBER_CPP_API
ACL_FIBER_EVENT * get_event(void) const
Definition: fiber_event.hpp:52
struct ACL_FIBER_EVENT ACL_FIBER_EVENT
Definition: fiber_event.h:16