solidc
Robust collection of general-purpose cross-platform C libraries and data structures designed for rapid and safe development in C
Loading...
Searching...
No Matches
rwlock.h
Go to the documentation of this file.
1
6#ifndef __RWLOCK_H__
7#define __RWLOCK_H__
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
13// Cross-platform thread synchronization
14#ifdef _WIN32
15#include <windows.h>
16typedef SRWLOCK rwlock_t;
17#else
18#include <pthread.h>
19typedef pthread_rwlock_t rwlock_t;
20#endif
21
22// Cross-platform rwlock helpers
23#ifdef _WIN32
24
31static inline bool rwlock_init(rwlock_t* lock) {
32 InitializeSRWLock(lock);
33 return true; // Windows SRWLOCK initialization cannot fail
34}
35
42static inline void rwlock_rdlock(rwlock_t* lock) { AcquireSRWLockShared(lock); }
43
50static inline void rwlock_wrlock(rwlock_t* lock) { AcquireSRWLockExclusive(lock); }
51
57static inline void rwlock_unlock_rd(rwlock_t* lock) { ReleaseSRWLockShared(lock); }
58
64static inline void rwlock_unlock_wr(rwlock_t* lock) { ReleaseSRWLockExclusive(lock); }
65
72static inline void rwlock_destroy(rwlock_t* lock) {
73 // SRWLOCK doesn't need explicit destruction
74 (void)lock;
75}
76#else
83static inline bool rwlock_init(rwlock_t* lock) { return pthread_rwlock_init(lock, NULL) == 0; }
84
91static inline void rwlock_rdlock(rwlock_t* lock) { pthread_rwlock_rdlock(lock); }
92
99static inline void rwlock_wrlock(rwlock_t* lock) { pthread_rwlock_wrlock(lock); }
100
106static inline void rwlock_unlock_rd(rwlock_t* lock) { pthread_rwlock_unlock(lock); }
107
113static inline void rwlock_unlock_wr(rwlock_t* lock) { pthread_rwlock_unlock(lock); }
114
121static inline void rwlock_destroy(rwlock_t* lock) { pthread_rwlock_destroy(lock); }
122#endif
123
124#ifdef __cplusplus
125}
126#endif
127
128#endif // __RWLOCK_H__