You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by da...@apache.org on 2006/02/13 03:19:08 UTC
svn commit: r377289 - /webservices/axis2/trunk/c/include/axis2_thread_mutex.h
Author: damitha
Date: Sun Feb 12 18:19:06 2006
New Revision: 377289
URL: http://svn.apache.org/viewcvs?rev=377289&view=rev
Log:
mutex prototypes
Added:
webservices/axis2/trunk/c/include/axis2_thread_mutex.h (with props)
Added: webservices/axis2/trunk/c/include/axis2_thread_mutex.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/include/axis2_thread_mutex.h?rev=377289&view=auto
==============================================================================
--- webservices/axis2/trunk/c/include/axis2_thread_mutex.h (added)
+++ webservices/axis2/trunk/c/include/axis2_thread_mutex.h Sun Feb 12 18:19:06 2006
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef AXIS2_THREAD_MUTEX_H
+#define AXIS2_THREAD_MUTEX_H
+
+/**
+ * @file axis2_thread_mutex.h
+ * @brief AXIS2 Thread Mutex Routines
+ */
+
+#include <axis2.h>
+#include <axis2_allocator.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/**
+ * @defgroup axis2_mutex Thread Mutex Routines
+ * @ingroup axis2_util
+ * @{
+ */
+
+/** Opaque thread-local mutex structure */
+typedef struct axis2_thread_mutex_t axis2_thread_mutex_t;
+
+#define AXIS2_THREAD_MUTEX_DEFAULT 0x0 /**< platform-optimal lock behavior */
+#define AXIS2_THREAD_MUTEX_NESTED 0x1 /**< enable nested (recursive) locks */
+#define AXIS2_THREAD_MUTEX_UNNESTED 0x2 /**< disable nested locks */
+
+/**
+ * Create and initialize a mutex that can be used to synchronize threads.
+ *
+ * @param flags Or'ed value of:
+ * <PRE>
+ * AXIS2_THREAD_MUTEX_DEFAULT platform-optimal lock behavior.
+ * AXIS2_THREAD_MUTEX_NESTED enable nested (recursive) locks.
+ * AXIS2_THREAD_MUTEX_UNNESTED disable nested locks (non-recursive).
+ * </PRE>
+ * @param allocator the allocator from which to allocate the mutex.
+ * @return mutex the memory address where the newly created mutex will be
+ * stored.
+ * @warning Be cautious in using AXIS2_THREAD_MUTEX_DEFAULT. While this is the
+ * most optimial mutex based on a given platform's performance charateristics,
+ * it will behave as either a nested or an unnested lock.
+ */
+AXIS2_DECLARE(axis2_thread_mutex_t *) axis2_thread_mutex_create(axis2_allocator_t *allocator,
+ unsigned int flags);
+/**
+ * Acquire the lock for the given mutex. If the mutex is already locked,
+ * the current thread will be put to sleep until the lock becomes available.
+ * @param mutex the mutex on which to acquire the lock.
+ */
+AXIS2_DECLARE(axis2_status_t) axis2_thread_mutex_lock(axis2_thread_mutex_t *mutex);
+
+/**
+ * Attempt to acquire the lock for the given mutex. If the mutex has already
+ * been acquired, the call returns immediately
+ * @param mutex the mutex on which to attempt the lock acquiring.
+ */
+AXIS2_DECLARE(axis2_status_t) axis2_thread_mutex_trylock(axis2_thread_mutex_t *mutex);
+
+/**
+ * Release the lock for the given mutex.
+ * @param mutex the mutex from which to release the lock.
+ */
+AXIS2_DECLARE(axis2_status_t) axis2_thread_mutex_unlock(axis2_thread_mutex_t *mutex);
+
+/**
+ * Destroy the mutex and free the memory associated with the lock.
+ * @param mutex the mutex to destroy.
+ */
+AXIS2_DECLARE(axis2_status_t) axis2_thread_mutex_destroy(axis2_thread_mutex_t *mutex);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* AXIS2_THREAD_MUTEX_H */
Propchange: webservices/axis2/trunk/c/include/axis2_thread_mutex.h
------------------------------------------------------------------------------
svn:executable = *