acl  3.5.3.0
acl_atomic.h
浏览该文件的文档.
1 #ifndef ACL_ATOMIC_INCLUDE_H
2 #define ACL_ATOMIC_INCLUDE_H
3 
4 #ifdef __cplusplus
5 extern "C"
6 {
7 #endif
8 
9 #include "acl_define.h"
10 
11 typedef struct ACL_ATOMIC ACL_ATOMIC;
12 
13 /**
14  * 创建原子对象
15  * @return {ACL_ATOMIC*} 返回新创建的对象
16  */
17 ACL_API ACL_ATOMIC *acl_atomic_new(void);
18 
19 /**
20  * 释放原子对象
21  * @param self {ACL_ATOMIC*} 原子对象
22  */
23 ACL_API void acl_atomic_free(ACL_ATOMIC *self);
24 
25 /**
26  * 将指定对象与原子对象绑定,以便于对该对象进行原子操作
27  * @param self {ACL_ATOMIC*} 原子对象
28  * @param value {void*} 被操作的对象,通过原子对象实现对该对象的原子操作
29  */
30 ACL_API void acl_atomic_set(ACL_ATOMIC *self, void *value);
31 
32 /**
33  * 比较并交换对象,当原子对象绑定的对象与给定比较对象相同时才设置新对象且
34  * 返回之前绑定的对象
35  * @param self {ACL_ATOMIC*} 原子对象
36  * @param cmp {void*} 待比较对象指针
37  * @param value {void*} 当原子对象与待比较对象相同时会将该对象与原子对象绑定
38  * @return {void*} 返回原子对象之前绑定的对象
39  */
40 ACL_API void *acl_atomic_cas(ACL_ATOMIC *self, void *cmp, void *value);
41 
42 /**
43  * 将原子对象与新对象进行绑定,并返回之前绑定的对象
44  * @param self {ACL_ATOMIC*} 原子对象
45  * @param value {void*} 将被绑定的新对象
46  * @return {void*} 返回之前绑定的对象
47  */
48 ACL_API void *acl_atomic_xchg(ACL_ATOMIC *self, void *value);
49 
50 /**
51  * 当调用 acl_atomic_set 绑定的对象为数值对象时,可以调用此函数设置被绑定对象
52  * 的长整数值
53  * @param self {ACL_ATOMIC*} 原子对象
54  * @param n {long long} 被原子对象所绑定的对象将被赋值为此值
55  */
56 ACL_API void acl_atomic_int64_set(ACL_ATOMIC *self, long long n);
57 
58 /**
59  * 先获得数值对象所存储的整数值,然后再增加指定的值存储于该数值对象中
60  * @param self {ACL_ATOMIC*} 原子对象
61  * @param n {long long} 增加值
62  * @return {long long} 返回增加之前数据数值对象的值
63  */
64 ACL_API long long acl_atomic_int64_fetch_add(ACL_ATOMIC *self, long long n);
65 
66 /**
67  * 对数据对象存储的值增加指定的值,并返回结果值
68  * @param self {ACL_ATOMIC*} 原子对象
69  * @param n {long long} 增加值
70  * @return {long long} 返回增加之后的值
71  */
72 ACL_API long long acl_atomic_int64_add_fetch(ACL_ATOMIC *self, long long n);
73 
74 /**
75  * 比较并交换整数值,当原子对象存储的整数值与给定比较整数值相同时才设置新整数
76  * 值且返回之前存储的整数值
77  * @param self {ACL_ATOMIC*} 原子对象
78  * @param cmp {long long} 待比较整数值
79  * @param n {long long} 当原子对象与待比较整数值相同时会将原子对象设置为此值
80  * @return {long long} 返回原子对象之前存储的整数值
81  */
82 ACL_API long long acl_atomic_int64_cas(ACL_ATOMIC *self, long long cmp, long long n);
83 
84 /****************************************************************************/
85 
87 
89 ACL_API void acl_atomic_clock_free(ACL_ATOMIC_CLOCK *clk);
90 ACL_API long long acl_atomic_clock_count_add(ACL_ATOMIC_CLOCK *clk, int n);
91 ACL_API long long acl_atomic_clock_users_add(ACL_ATOMIC_CLOCK *clk, int n);
93 ACL_API long long acl_atomic_clock_count(ACL_ATOMIC_CLOCK *clk);
94 ACL_API long long acl_atomic_clock_atime(ACL_ATOMIC_CLOCK *clk);
95 ACL_API long long acl_atomic_clock_users(ACL_ATOMIC_CLOCK *clk);
96 
97 #ifdef __cplusplus
98 }
99 #endif
100 
101 #endif
ACL_API void acl_atomic_clock_users_count_inc(ACL_ATOMIC_CLOCK *clk)
struct ACL_ATOMIC ACL_ATOMIC
Definition: acl_atomic.h:11
ACL_API void acl_atomic_free(ACL_ATOMIC *self)
ACL_API long long acl_atomic_int64_fetch_add(ACL_ATOMIC *self, long long n)
ACL_API long long acl_atomic_int64_cas(ACL_ATOMIC *self, long long cmp, long long n)
ACL_API void acl_atomic_set(ACL_ATOMIC *self, void *value)
ACL_API void acl_atomic_int64_set(ACL_ATOMIC *self, long long n)
ACL_API void acl_atomic_clock_free(ACL_ATOMIC_CLOCK *clk)
ACL_API long long acl_atomic_clock_count_add(ACL_ATOMIC_CLOCK *clk, int n)
ACL_API long long acl_atomic_int64_add_fetch(ACL_ATOMIC *self, long long n)
ACL_API long long acl_atomic_clock_atime(ACL_ATOMIC_CLOCK *clk)
ACL_API ACL_ATOMIC_CLOCK * acl_atomic_clock_alloc(void)
ACL_API long long acl_atomic_clock_users_add(ACL_ATOMIC_CLOCK *clk, int n)
ACL_API long long acl_atomic_clock_count(ACL_ATOMIC_CLOCK *clk)
ACL_API long long acl_atomic_clock_users(ACL_ATOMIC_CLOCK *clk)
ACL_API void * acl_atomic_xchg(ACL_ATOMIC *self, void *value)
struct ACL_ATOMIC_CLOCK ACL_ATOMIC_CLOCK
Definition: acl_atomic.h:86
ACL_API void * acl_atomic_cas(ACL_ATOMIC *self, void *cmp, void *value)
ACL_API ACL_ATOMIC * acl_atomic_new(void)