acl  3.5.3.0
thread_mutex.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include "noncopyable.hpp"
4 
5 #if !defined(_WIN32) && !defined(_WIN64)
6 # include <pthread.h>
7 # ifndef acl_pthread_mutex_t
8 # define acl_pthread_mutex_t pthread_mutex_t
9 # endif
10 #else
11 struct acl_pthread_mutex_t;
12 #endif
13 
14 namespace acl {
15 
16 /**
17  * 线程互斥锁
18  */
20 {
21 public:
22  /**
23  * 构造方法
24  * @param recursive {bool} 是否启用递归锁方式
25  */
26  thread_mutex(bool recursive = true);
27  ~thread_mutex(void);
28 
29  /**
30  * 对线程锁进行加锁,一直到加锁成功或内部失败(一般不会失败,除非是系统问题)
31  * @return {bool} 返回 false 说明线程锁有问题
32  */
33  bool lock(void);
34 
35  /**
36  * 尝试性加锁,无论成功与否都会立即返回
37  * @return {bool} 返回 true 表示加锁成功,返回 false 表示加锁失败
38  */
39  bool try_lock(void);
40 
41  /**
42  * 解线程锁
43  * @return {bool} 返回 false 表示解锁失败,有可能之前并未加锁成功所致
44  */
45  bool unlock(void);
46 
47  /**
48  * 获得 acl 中 C 版本的系统类型的线程锁
49  * @return {acl_pthread_mutex_t*}
50  */
51  acl_pthread_mutex_t* get_mutex(void) const;
52 
53 private:
54  acl_pthread_mutex_t* mutex_;
55 #if !defined(_WIN32) && !defined(_WIN64)
56  pthread_mutexattr_t mutex_attr_;
57 #endif
58 };
59 
61 {
62 public:
64  ~thread_mutex_guard(void);
65 
66 private:
67  thread_mutex& mutex_;
68 };
69 
70 } // namespace acl
#define ACL_CPP_API