1 /****h* silcutil/silcmutex.h
9 * Author: Pekka Riikonen <priikone@silcnet.org>
11 * Copyright (C) 2001 Pekka Riikonen
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
25 * Interface for the SILC Mutex locking implementation. This is platform
26 * independent mutual exclusion interface for applications that need
27 * concurrency control.
36 /****s* silcutil/SilcMutexAPI/SilcMutex
40 * typedef struct SilcMutexStruct *SilcMutex;
44 * This context is the actual SILC Mutex and is allocated
45 * by silc_mutex_alloc and given as argument to all silc_mutex_*
46 * functions. It is freed by the silc_mutex_free function.
49 typedef struct SilcMutexStruct *SilcMutex;
51 /****f* silcutil/SilcMutexAPI/silc_mutex_alloc
55 * SilcMutex silc_mutex_alloc(void);
59 * Allocates SILC Mutex object. The mutex object must be allocated
60 * before it can be used. It is freed by the silc_mutex_free function.
63 SilcMutex silc_mutex_alloc(void);
65 /****f* silcutil/SilcMutexAPI/silc_mutex_free
69 * void silc_mutex_free(SilcMutex mutex);
73 * Free SILC Mutex object and frees all allocated memory.
76 void silc_mutex_free(SilcMutex mutex);
78 /****f* silcutil/SilcMutexAPI/silc_mutex_lock
82 * void silc_mutex_lock(SilcMutex mutex);
86 * Locks the mutex. If the mutex is locked by another thread the
87 * current thread will block until the other thread has issued
88 * silc_mutex_unlock for the mutex.
92 * The caller must not call silc_mutex_lock for mutex that has been
93 * already locked in the current thread. In this case deadlock will
97 void silc_mutex_lock(SilcMutex mutex);
99 /****f* silcutil/SilcMutexAPI/silc_mutex_unlock
103 * void silc_mutex_unlock(SilcMutex mutex);
107 * Unlocks the mutex and thus releases it for another thread that
108 * may be waiting for the lock.
112 * The caller must not call the silc_mutex_unlock for an unlocked
113 * mutex or mutex not locked by the current thread. It is fatal
114 * error if this occurs.
117 void silc_mutex_unlock(SilcMutex mutex);