Apache Portable Runtime
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
apr_atomic.h
Go to the documentation of this file.
1
/* Licensed to the Apache Software Foundation (ASF) under one or more
2
* contributor license agreements. See the NOTICE file distributed with
3
* this work for additional information regarding copyright ownership.
4
* The ASF licenses this file to You under the Apache License, Version 2.0
5
* (the "License"); you may not use this file except in compliance with
6
* the License. You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
#ifndef APR_ATOMIC_H
18
#define APR_ATOMIC_H
19
20
/**
21
* @file apr_atomic.h
22
* @brief APR Atomic Operations
23
*/
24
25
#include "
apr.h
"
26
#include "
apr_pools.h
"
27
28
#ifdef __cplusplus
29
extern
"C"
{
30
#endif
31
32
/**
33
* @defgroup apr_atomic Atomic Operations
34
* @ingroup APR
35
* @{
36
*/
37
38
/**
39
* this function is required on some platforms to initialize the
40
* atomic operation's internal structures
41
* @param p pool
42
* @return APR_SUCCESS on successful completion
43
* @remark Programs do NOT need to call this directly. APR will call this
44
* automatically from apr_initialize.
45
* @internal
46
*/
47
APR_DECLARE
(
apr_status_t
)
apr_atomic_init
(
apr_pool_t
*p);
48
49
/*
50
* Atomic operations on 32-bit values
51
* Note: Each of these functions internally implements a memory barrier
52
* on platforms that require it
53
*/
54
55
/**
56
* atomically read an apr_uint32_t from memory
57
* @param mem the pointer
58
*/
59
APR_DECLARE
(apr_uint32_t)
apr_atomic_read32
(volatile apr_uint32_t *mem);
60
61
/**
62
* atomically set an apr_uint32_t in memory
63
* @param mem pointer to the object
64
* @param val value that the object will assume
65
*/
66
APR_DECLARE
(
void
)
apr_atomic_set32
(volatile apr_uint32_t *mem, apr_uint32_t val);
67
68
/**
69
* atomically add 'val' to an apr_uint32_t
70
* @param mem pointer to the object
71
* @param val amount to add
72
* @return old value pointed to by mem
73
*/
74
APR_DECLARE
(apr_uint32_t)
apr_atomic_add32
(volatile apr_uint32_t *mem, apr_uint32_t val);
75
76
/**
77
* atomically subtract 'val' from an apr_uint32_t
78
* @param mem pointer to the object
79
* @param val amount to subtract
80
*/
81
APR_DECLARE
(
void
)
apr_atomic_sub32
(volatile apr_uint32_t *mem, apr_uint32_t val);
82
83
/**
84
* atomically increment an apr_uint32_t by 1
85
* @param mem pointer to the object
86
* @return old value pointed to by mem
87
*/
88
APR_DECLARE
(apr_uint32_t)
apr_atomic_inc32
(volatile apr_uint32_t *mem);
89
90
/**
91
* atomically decrement an apr_uint32_t by 1
92
* @param mem pointer to the atomic value
93
* @return zero if the value becomes zero on decrement, otherwise non-zero
94
*/
95
APR_DECLARE
(
int
)
apr_atomic_dec32
(volatile apr_uint32_t *mem);
96
97
/**
98
* compare an apr_uint32_t's value with 'cmp'.
99
* If they are the same swap the value with 'with'
100
* @param mem pointer to the value
101
* @param with what to swap it with
102
* @param cmp the value to compare it to
103
* @return the old value of *mem
104
*/
105
APR_DECLARE
(apr_uint32_t)
apr_atomic_cas32
(volatile apr_uint32_t *mem, apr_uint32_t with,
106
apr_uint32_t cmp);
107
108
/**
109
* exchange an apr_uint32_t's value with 'val'.
110
* @param mem pointer to the value
111
* @param val what to swap it with
112
* @return the old value of *mem
113
*/
114
APR_DECLARE
(apr_uint32_t)
apr_atomic_xchg32
(volatile apr_uint32_t *mem, apr_uint32_t val);
115
116
/**
117
* compare the pointer's value with cmp.
118
* If they are the same swap the value with 'with'
119
* @param mem pointer to the pointer
120
* @param with what to swap it with
121
* @param cmp the value to compare it to
122
* @return the old value of the pointer
123
*/
124
APR_DECLARE
(
void
*)
apr_atomic_casptr
(volatile
void
**mem,
void
*with, const
void
*cmp);
125
126
/**
127
* exchange a pair of pointer values
128
* @param mem pointer to the pointer
129
* @param with what to swap it with
130
* @return the old value of the pointer
131
*/
132
APR_DECLARE
(
void
*)
apr_atomic_xchgptr
(volatile
void
**mem,
void
*with);
133
134
/** @} */
135
136
#ifdef __cplusplus
137
}
138
#endif
139
140
#endif
/* !APR_ATOMIC_H */
Generated on Sun Jul 7 2013 03:35:10 for Apache Portable Runtime by
1.8.1.2