Apache Portable Runtime
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
usr
include
apr-1
apr_queue.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_QUEUE_H
18
#define APR_QUEUE_H
19
20
/**
21
* @file apr_queue.h
22
* @brief Thread Safe FIFO bounded queue
23
* @note Since most implementations of the queue are backed by a condition
24
* variable implementation, it isn't available on systems without threads.
25
* Although condition variables are some times available without threads.
26
*/
27
28
#include "apu.h"
29
#include "
apr_errno.h
"
30
#include "
apr_pools.h
"
31
32
#if APR_HAS_THREADS
33
34
#ifdef __cplusplus
35
extern
"C"
{
36
#endif
/* __cplusplus */
37
38
/**
39
* @defgroup APR_Util_FIFO Thread Safe FIFO bounded queue
40
* @ingroup APR_Util
41
* @{
42
*/
43
44
/**
45
* opaque structure
46
*/
47
typedef
struct
apr_queue_t
apr_queue_t
;
48
49
/**
50
* create a FIFO queue
51
* @param queue The new queue
52
* @param queue_capacity maximum size of the queue
53
* @param a pool to allocate queue from
54
*/
55
APU_DECLARE(
apr_status_t
)
apr_queue_create
(
apr_queue_t
**queue,
56
unsigned
int
queue_capacity,
57
apr_pool_t
*a);
58
59
/**
60
* push/add an object to the queue, blocking if the queue is already full
61
*
62
* @param queue the queue
63
* @param data the data
64
* @returns APR_EINTR the blocking was interrupted (try again)
65
* @returns APR_EOF the queue has been terminated
66
* @returns APR_SUCCESS on a successful push
67
*/
68
APU_DECLARE(
apr_status_t
)
apr_queue_push
(
apr_queue_t
*queue,
void
*data);
69
70
/**
71
* pop/get an object from the queue, blocking if the queue is already empty
72
*
73
* @param queue the queue
74
* @param data the data
75
* @returns APR_EINTR the blocking was interrupted (try again)
76
* @returns APR_EOF if the queue has been terminated
77
* @returns APR_SUCCESS on a successful pop
78
*/
79
APU_DECLARE(
apr_status_t
)
apr_queue_pop
(
apr_queue_t
*queue,
void
**data);
80
81
/**
82
* push/add an object to the queue, returning immediately if the queue is full
83
*
84
* @param queue the queue
85
* @param data the data
86
* @returns APR_EINTR the blocking operation was interrupted (try again)
87
* @returns APR_EAGAIN the queue is full
88
* @returns APR_EOF the queue has been terminated
89
* @returns APR_SUCCESS on a successful push
90
*/
91
APU_DECLARE(
apr_status_t
)
apr_queue_trypush
(
apr_queue_t
*queue,
void
*data);
92
93
/**
94
* pop/get an object to the queue, returning immediately if the queue is empty
95
*
96
* @param queue the queue
97
* @param data the data
98
* @returns APR_EINTR the blocking operation was interrupted (try again)
99
* @returns APR_EAGAIN the queue is empty
100
* @returns APR_EOF the queue has been terminated
101
* @returns APR_SUCCESS on a successful pop
102
*/
103
APU_DECLARE(
apr_status_t
)
apr_queue_trypop
(
apr_queue_t
*queue,
void
**data);
104
105
/**
106
* returns the size of the queue.
107
*
108
* @warning this is not threadsafe, and is intended for reporting/monitoring
109
* of the queue.
110
* @param queue the queue
111
* @returns the size of the queue
112
*/
113
APU_DECLARE(
unsigned
int
)
apr_queue_size
(
apr_queue_t
*queue);
114
115
/**
116
* interrupt all the threads blocking on this queue.
117
*
118
* @param queue the queue
119
*/
120
APU_DECLARE(
apr_status_t
)
apr_queue_interrupt_all
(
apr_queue_t
*queue);
121
122
/**
123
* terminate the queue, sending an interrupt to all the
124
* blocking threads
125
*
126
* @param queue the queue
127
*/
128
APU_DECLARE(
apr_status_t
)
apr_queue_term
(
apr_queue_t
*queue);
129
130
#ifdef __cplusplus
131
}
132
#endif
133
134
/** @} */
135
136
#endif
/* APR_HAS_THREADS */
137
138
#endif
/* APRQUEUE_H */
Generated by
1.8.4