1
/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
8
* http://www.apache.org/licenses/LICENSE-2.0
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.
17
#ifndef APR_THREAD_MUTEX_H
18
#define APR_THREAD_MUTEX_H
21
* @file apr_thread_mutex.h
22
* @brief APR Thread Mutex Routines
26
#include "apr_errno.h"
30
#endif /* __cplusplus */
32
#if APR_HAS_THREADS || defined(DOXYGEN)
35
* @defgroup apr_thread_mutex Thread Mutex Routines
40
/** Opaque thread-local mutex structure */
41
typedef struct apr_thread_mutex_t apr_thread_mutex_t;
43
#define APR_THREAD_MUTEX_DEFAULT 0x0 /**< platform-optimal lock behavior */
44
#define APR_THREAD_MUTEX_NESTED 0x1 /**< enable nested (recursive) locks */
45
#define APR_THREAD_MUTEX_UNNESTED 0x2 /**< disable nested locks */
47
/* Delayed the include to avoid a circular reference */
48
#include "apr_pools.h"
51
* Create and initialize a mutex that can be used to synchronize threads.
52
* @param mutex the memory address where the newly created mutex will be
54
* @param flags Or'ed value of:
56
* APR_THREAD_MUTEX_DEFAULT platform-optimal lock behavior.
57
* APR_THREAD_MUTEX_NESTED enable nested (recursive) locks.
58
* APR_THREAD_MUTEX_UNNESTED disable nested locks (non-recursive).
60
* @param pool the pool from which to allocate the mutex.
61
* @warning Be cautious in using APR_THREAD_MUTEX_DEFAULT. While this is the
62
* most optimial mutex based on a given platform's performance charateristics,
63
* it will behave as either a nested or an unnested lock.
65
APR_DECLARE(apr_status_t) apr_thread_mutex_create(apr_thread_mutex_t **mutex,
69
* Acquire the lock for the given mutex. If the mutex is already locked,
70
* the current thread will be put to sleep until the lock becomes available.
71
* @param mutex the mutex on which to acquire the lock.
73
APR_DECLARE(apr_status_t) apr_thread_mutex_lock(apr_thread_mutex_t *mutex);
76
* Attempt to acquire the lock for the given mutex. If the mutex has already
77
* been acquired, the call returns immediately with APR_EBUSY. Note: it
78
* is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
79
* if the return value was APR_EBUSY, for portability reasons.
80
* @param mutex the mutex on which to attempt the lock acquiring.
82
APR_DECLARE(apr_status_t) apr_thread_mutex_trylock(apr_thread_mutex_t *mutex);
85
* Release the lock for the given mutex.
86
* @param mutex the mutex from which to release the lock.
88
APR_DECLARE(apr_status_t) apr_thread_mutex_unlock(apr_thread_mutex_t *mutex);
91
* Destroy the mutex and free the memory associated with the lock.
92
* @param mutex the mutex to destroy.
94
APR_DECLARE(apr_status_t) apr_thread_mutex_destroy(apr_thread_mutex_t *mutex);
97
* Get the pool used by this thread_mutex.
98
* @return apr_pool_t the pool
100
APR_POOL_DECLARE_ACCESSOR(thread_mutex);
102
#endif /* APR_HAS_THREADS */
110
#endif /* ! APR_THREAD_MUTEX_H */