acl
3.5.3.0
locker.hpp
浏览该文件的文档.
1
#pragma once
2
#include "../acl_cpp_define.hpp"
3
#include "
noncopyable.hpp
"
4
#include <stdlib.h>
5
#if !defined(_WIN32) && !defined(_WIN64)
6
#include <pthread.h>
7
#endif
8
9
#if defined(_WIN32) || defined(_WIN64)
10
struct
acl_pthread_mutex_t
;
11
#else
12
# ifndef acl_pthread_mutex_t
13
# define acl_pthread_mutex_t pthread_mutex_t
14
# endif
15
#endif
16
17
namespace
acl
{
18
19
/**
20
* 互斥锁,可以同时创建文件锁和线程锁,也可以只创建一种锁
21
*/
22
class
ACL_CPP_API
locker
:
public
noncopyable
23
{
24
public
:
25
/**
26
* 构造函数
27
* @param use_mutex {bool} 是否创建线程锁
28
* @param use_spinlock {bool} 内部当使用线程锁时是否需要自旋锁
29
*/
30
locker
(
bool
use_mutex =
true
,
bool
use_spinlock =
false
);
31
virtual
~
locker
();
32
33
/**
34
* 根据文件路径创建文件锁
35
* @param file_path {const char*} 文件路径,非空
36
* @return {bool} 是否成功
37
* 注:此函数与下面的 open 函数仅能同时调用一个
38
*/
39
bool
open(
const
char
* file_path);
40
41
/**
42
* 根据文件句柄创建文件锁
43
* @param fh {int} 文件句柄
44
* @return {bool} 是否成功
45
*/
46
#if defined(_WIN32) || defined(_WIN64)
47
bool
open(
void
* fh);
48
#else
49
bool
open(
int
fh);
50
#endif
51
52
/**
53
* 针对已经打开的锁(包括线程锁和文件锁)进行加锁
54
* @return {bool} 加锁是否成功
55
*/
56
bool
lock();
57
58
/**
59
* 尝试对已经打开的锁(包括线程锁和文件锁)进行加锁
60
* @return {bool} 加锁是否成功
61
*/
62
bool
try_lock();
63
64
/**
65
* 针对已经打开的锁(包括线程锁和文件锁)进行解锁
66
* @return {bool} 解锁是否成功
67
*/
68
bool
unlock();
69
70
private
:
71
acl_pthread_mutex_t
* mutex_;
72
char
* pFile_;
73
#if defined(_WIN32) || defined(_WIN64)
74
void
* fHandle_;
75
#else
76
int
fHandle_;
77
pthread_mutexattr_t mutex_attr_;
78
# if !defined(MINGW) && !defined(__APPLE__) && !defined(ANDROID)
79
pthread_spinlock_t* spinlock_;
80
# endif
81
#endif
82
bool
myFHandle_;
83
84
void
init_mutex(
bool
use_spinlock);
85
};
86
87
class
ACL_CPP_API
lock_guard
:
public
noncopyable
88
{
89
public
:
90
lock_guard
(
locker
& lk);
91
~
lock_guard
();
92
93
private
:
94
locker
& lk_;
95
};
96
97
}
// namespace acl
acl::locker
Definition:
locker.hpp:22
acl
Definition:
acl_cpp_init.hpp:4
acl::noncopyable
Definition:
noncopyable.hpp:6
noncopyable.hpp
acl::lock_guard
Definition:
locker.hpp:87
ACL_CPP_API
#define ACL_CPP_API
Definition:
acl_cpp_define.hpp:16
acl_pthread_mutex_t
Definition:
acl_pthread.h:98
include
acl_cpp
stdlib
locker.hpp
生成于 2021年 九月 10日 星期五 11:14:44 , 为 acl使用
1.8.15