prrwlock.h (2854B)
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 /* 7 ** File: prrwlock.h 8 ** Description: API to basic reader-writer lock functions of NSPR. 9 ** 10 **/ 11 12 #ifndef prrwlock_h___ 13 #define prrwlock_h___ 14 15 #include "prtypes.h" 16 17 PR_BEGIN_EXTERN_C 18 19 /* 20 * PRRWLock -- 21 * 22 * The reader writer lock, PRRWLock, is an opaque object to the clients 23 * of NSPR. All routines operate on a pointer to this opaque entity. 24 */ 25 26 27 typedef struct PRRWLock PRRWLock; 28 29 #define PR_RWLOCK_RANK_NONE 0 30 31 32 /*********************************************************************** 33 ** FUNCTION: PR_NewRWLock 34 ** DESCRIPTION: 35 ** Returns a pointer to a newly created reader-writer lock object. 36 ** INPUTS: Lock rank 37 ** Lock name 38 ** OUTPUTS: void 39 ** RETURN: PRRWLock* 40 ** If the lock cannot be created because of resource constraints, NULL 41 ** is returned. 42 ** 43 ***********************************************************************/ 44 NSPR_API(PRRWLock*) PR_NewRWLock(PRUint32 lock_rank, const char *lock_name); 45 46 /*********************************************************************** 47 ** FUNCTION: PR_DestroyRWLock 48 ** DESCRIPTION: 49 ** Destroys a given RW lock object. 50 ** INPUTS: PRRWLock *lock - Lock to be freed. 51 ** OUTPUTS: void 52 ** RETURN: None 53 ***********************************************************************/ 54 NSPR_API(void) PR_DestroyRWLock(PRRWLock *lock); 55 56 /*********************************************************************** 57 ** FUNCTION: PR_RWLock_Rlock 58 ** DESCRIPTION: 59 ** Apply a read lock (non-exclusive) on a RWLock 60 ** INPUTS: PRRWLock *lock - Lock to be read-locked. 61 ** OUTPUTS: void 62 ** RETURN: None 63 ***********************************************************************/ 64 NSPR_API(void) PR_RWLock_Rlock(PRRWLock *lock); 65 66 /*********************************************************************** 67 ** FUNCTION: PR_RWLock_Wlock 68 ** DESCRIPTION: 69 ** Apply a write lock (exclusive) on a RWLock 70 ** INPUTS: PRRWLock *lock - Lock to write-locked. 71 ** OUTPUTS: void 72 ** RETURN: None 73 ***********************************************************************/ 74 NSPR_API(void) PR_RWLock_Wlock(PRRWLock *lock); 75 76 /*********************************************************************** 77 ** FUNCTION: PR_RWLock_Unlock 78 ** DESCRIPTION: 79 ** Release a RW lock. Unlocking an unlocked lock has undefined results. 80 ** INPUTS: PRRWLock *lock - Lock to unlocked. 81 ** OUTPUTS: void 82 ** RETURN: void 83 ***********************************************************************/ 84 NSPR_API(void) PR_RWLock_Unlock(PRRWLock *lock); 85 86 PR_END_EXTERN_C 87 88 #endif /* prrwlock_h___ */