home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 November / CMCD1104.ISO / Software / Complet / Apache / apache_2.0.52-win32-x86-no_ssl.msi / Data.Cab / F277237_apr_thread_mutex.h < prev    next >
C/C++ Source or Header  |  2004-02-13  |  4KB  |  110 lines

  1. /* Copyright 2000-2004 The Apache Software Foundation
  2.  *
  3.  * Licensed under the Apache License, Version 2.0 (the "License");
  4.  * you may not use this file except in compliance with the License.
  5.  * You may obtain a copy of the License at
  6.  *
  7.  *     http://www.apache.org/licenses/LICENSE-2.0
  8.  *
  9.  * Unless required by applicable law or agreed to in writing, software
  10.  * distributed under the License is distributed on an "AS IS" BASIS,
  11.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12.  * See the License for the specific language governing permissions and
  13.  * limitations under the License.
  14.  */
  15.  
  16. #ifndef APR_THREAD_MUTEX_H
  17. #define APR_THREAD_MUTEX_H
  18.  
  19. /**
  20.  * @file apr_thread_mutex.h
  21.  * @brief APR Thread Mutex Routines
  22.  */
  23.  
  24. #include "apr.h"
  25. #include "apr_errno.h"
  26.  
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif /* __cplusplus */
  30.  
  31. #if APR_HAS_THREADS || defined(DOXYGEN)
  32.  
  33. /**
  34.  * @defgroup apr_thread_mutex Thread Mutex Routines
  35.  * @ingroup APR 
  36.  * @{
  37.  */
  38.  
  39. /** Opaque thread-local mutex structure */
  40. typedef struct apr_thread_mutex_t apr_thread_mutex_t;
  41.  
  42. #define APR_THREAD_MUTEX_DEFAULT  0x0   /**< platform-optimal lock behavior */
  43. #define APR_THREAD_MUTEX_NESTED   0x1   /**< enable nested (recursive) locks */
  44. #define APR_THREAD_MUTEX_UNNESTED 0x2   /**< disable nested locks */
  45.  
  46. /* Delayed the include to avoid a circular reference */
  47. #include "apr_pools.h"
  48.  
  49. /**
  50.  * Create and initialize a mutex that can be used to synchronize threads.
  51.  * @param mutex the memory address where the newly created mutex will be
  52.  *        stored.
  53.  * @param flags Or'ed value of:
  54.  * <PRE>
  55.  *           APR_THREAD_MUTEX_DEFAULT   platform-optimal lock behavior.
  56.  *           APR_THREAD_MUTEX_NESTED    enable nested (recursive) locks.
  57.  *           APR_THREAD_MUTEX_UNNESTED  disable nested locks (non-recursive).
  58.  * </PRE>
  59.  * @param pool the pool from which to allocate the mutex.
  60.  * @warning Be cautious in using APR_THREAD_MUTEX_DEFAULT.  While this is the
  61.  * most optimial mutex based on a given platform's performance charateristics,
  62.  * it will behave as either a nested or an unnested lock.
  63.  */
  64. APR_DECLARE(apr_status_t) apr_thread_mutex_create(apr_thread_mutex_t **mutex,
  65.                                                   unsigned int flags,
  66.                                                   apr_pool_t *pool);
  67. /**
  68.  * Acquire the lock for the given mutex. If the mutex is already locked,
  69.  * the current thread will be put to sleep until the lock becomes available.
  70.  * @param mutex the mutex on which to acquire the lock.
  71.  */
  72. APR_DECLARE(apr_status_t) apr_thread_mutex_lock(apr_thread_mutex_t *mutex);
  73.  
  74. /**
  75.  * Attempt to acquire the lock for the given mutex. If the mutex has already
  76.  * been acquired, the call returns immediately with APR_EBUSY. Note: it
  77.  * is important that the APR_STATUS_IS_EBUSY(s) macro be used to determine
  78.  * if the return value was APR_EBUSY, for portability reasons.
  79.  * @param mutex the mutex on which to attempt the lock acquiring.
  80.  */
  81. APR_DECLARE(apr_status_t) apr_thread_mutex_trylock(apr_thread_mutex_t *mutex);
  82.  
  83. /**
  84.  * Release the lock for the given mutex.
  85.  * @param mutex the mutex from which to release the lock.
  86.  */
  87. APR_DECLARE(apr_status_t) apr_thread_mutex_unlock(apr_thread_mutex_t *mutex);
  88.  
  89. /**
  90.  * Destroy the mutex and free the memory associated with the lock.
  91.  * @param mutex the mutex to destroy.
  92.  */
  93. APR_DECLARE(apr_status_t) apr_thread_mutex_destroy(apr_thread_mutex_t *mutex);
  94.  
  95. /**
  96.  * Get the pool used by this thread_mutex.
  97.  * @return apr_pool_t the pool
  98.  */
  99. APR_POOL_DECLARE_ACCESSOR(thread_mutex);
  100.  
  101. #endif /* APR_HAS_THREADS */
  102.  
  103. /** @} */
  104.  
  105. #ifdef __cplusplus
  106. }
  107. #endif
  108.  
  109. #endif  /* ! APR_THREAD_MUTEX_H */
  110.