X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=include%2Fyaz%2Fmutex.h;h=ff8babbd429865dccfa61fe8ebd18c8664cfcf2f;hb=df1a0cf4e1b057630ead09d185ca9ef0deddda2e;hp=6ef4382bfc0d6db97419c18c11fd4144560c70ee;hpb=79c68f7855e83d0a9c641dadb8a0a378cf343c92;p=yaz-moved-to-github.git diff --git a/include/yaz/mutex.h b/include/yaz/mutex.h index 6ef4382..ff8babb 100644 --- a/include/yaz/mutex.h +++ b/include/yaz/mutex.h @@ -33,6 +33,7 @@ #define YAZ_MUTEX_H #include +#include #include YAZ_BEGIN_CDECL @@ -40,6 +41,9 @@ YAZ_BEGIN_CDECL /** \brief YAZ MUTEX opaque pointer */ typedef struct yaz_mutex *YAZ_MUTEX; +/** \brief YAZ condition opaque pointer */ +typedef struct yaz_cond *YAZ_COND; + /** \brief create MUTEX \param mutexp is pointer to MUTEX handle (*mutexp must be NULL) @@ -48,6 +52,17 @@ typedef struct yaz_mutex *YAZ_MUTEX; */ YAZ_EXPORT void yaz_mutex_create(YAZ_MUTEX *mutexp); +/** \brief create MUTEX with custom MUTEX flags + \param mutexp is pointer to MUTEX handle (*mutexp must be NULL) + \param attr is flags defined by PTHREAD_MUTEX_xxx + + It is important that *mutexp is NULL. If not, yaz_mutex_create will + not modify the handle (assumes it is already created!) + + This calls yax_mutex_create_attr(mutexp, PTHREAD_MUTEX_NORMAL) + */ +YAZ_EXPORT void yaz_mutex_create_attr(YAZ_MUTEX *mutexp, int flags); + /** \brief enter critical section / AKA lock \param mutex MUTEX handle */ @@ -80,8 +95,49 @@ YAZ_EXPORT void yaz_mutex_destroy(YAZ_MUTEX *mutexp); This function should be called after a MUTEX is created but before it is used for locking. */ +YAZ_EXPORT void yaz_mutex_set_name(YAZ_MUTEX mutex, int log_level, const char *name); +/** \brief creates condition variable + \param p reference to condition handle + + Upon successful completion *p holds the condition handle; *p = 0 + on error. +*/ +YAZ_EXPORT void yaz_cond_create(YAZ_COND *p); + +/** \brief destroys condition variable + \param p reference to condition handle + + Upon completion *p holds 0. +*/ +YAZ_EXPORT +void yaz_cond_destroy(YAZ_COND *p); + +struct timeval; + +/** \brief waits for condition + \param p condition variable handle + \param m mutex + \param abstime wait until this time; 0 for indefinite wait + + Semantics like pthread_cond_wait. +*/ +YAZ_EXPORT +int yaz_cond_wait(YAZ_COND p, YAZ_MUTEX m, const struct timeval *abstime); + +/** \brief unblock one thread waiting for block + \param p condition variable handle +*/ +YAZ_EXPORT +int yaz_cond_signal(YAZ_COND p); + +/** \brief unblock all threads waiting for block + \param p condition variable handle +*/ +YAZ_EXPORT +int yaz_cond_broadcast(YAZ_COND p); + YAZ_END_CDECL #endif