comparison foosdk/sdk/pfc/synchro_nix.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
comparison
equal deleted inserted replaced
0:e9bb126753e7 1:20d02a178406
1 #pragma once
2 #include <pthread.h>
3
4 namespace pfc {
5 class mutexAttr {
6 public:
7 mutexAttr() {pthread_mutexattr_init(&attr);}
8 ~mutexAttr() {pthread_mutexattr_destroy(&attr);}
9 void setType(int type) {pthread_mutexattr_settype(&attr, type);}
10 int getType() const {int rv = 0; pthread_mutexattr_gettype(&attr, &rv); return rv; }
11 void setRecursive() {setType(PTHREAD_MUTEX_RECURSIVE);}
12 bool isRecursive() {return getType() == PTHREAD_MUTEX_RECURSIVE;}
13 void setProcessShared() {pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);}
14 operator const pthread_mutexattr_t & () const {return attr;}
15 operator pthread_mutexattr_t & () {return attr;}
16 pthread_mutexattr_t attr;
17 private:
18 mutexAttr(const mutexAttr&) = delete; void operator=(const mutexAttr&) = delete;
19 };
20
21 class mutexBase {
22 public:
23 void lock() noexcept {pthread_mutex_lock(&obj);}
24 void unlock() noexcept {pthread_mutex_unlock(&obj);}
25
26 void enter() noexcept {lock();}
27 void leave() noexcept {unlock();}
28 bool tryEnter() noexcept {return pthread_mutex_trylock(&obj) == 0; }
29
30 void create( const pthread_mutexattr_t * attr );
31 void create( const mutexAttr & );
32 void createRecur();
33 void destroy();
34 protected:
35 mutexBase() {}
36 ~mutexBase() {}
37 private:
38 pthread_mutex_t obj;
39
40 void operator=( const mutexBase & ) = delete;
41 mutexBase( const mutexBase & ) = delete;
42 };
43
44
45
46 class mutex : public mutexBase {
47 public:
48 mutex() {create(NULL);}
49 ~mutex() {destroy();}
50 };
51
52 class mutexRecur : public mutexBase {
53 public:
54 mutexRecur() {createRecur();}
55 ~mutexRecur() {destroy();}
56 };
57
58
59 class mutexRecurStatic : public mutexBase {
60 public:
61 mutexRecurStatic() {createRecur();}
62 };
63
64
65
66 typedef mutexBase mutexBase_t;
67
68
69 class readWriteLockAttr {
70 public:
71 readWriteLockAttr() {pthread_rwlockattr_init( & attr ); }
72 ~readWriteLockAttr() {pthread_rwlockattr_destroy( & attr ) ;}
73
74 void setProcessShared( bool val = true ) {
75 pthread_rwlockattr_setpshared( &attr, val ? PTHREAD_PROCESS_SHARED : PTHREAD_PROCESS_PRIVATE );
76 }
77
78 pthread_rwlockattr_t attr;
79
80 private:
81 readWriteLockAttr(const readWriteLockAttr&) = delete;
82 void operator=(const readWriteLockAttr & ) = delete;
83 };
84
85 class readWriteLockBase {
86 public:
87 void create( const pthread_rwlockattr_t * attr );
88 void create( const readWriteLockAttr & );
89 void destroy() {pthread_rwlock_destroy( & obj ); }
90
91 void enterRead() noexcept {pthread_rwlock_rdlock( &obj ); }
92 void enterWrite() noexcept {pthread_rwlock_wrlock( &obj ); }
93 void leaveRead() noexcept {pthread_rwlock_unlock( &obj ); }
94 void leaveWrite() noexcept {pthread_rwlock_unlock( &obj ); }
95 protected:
96 readWriteLockBase() {}
97 ~readWriteLockBase() {}
98 private:
99 pthread_rwlock_t obj;
100
101 void operator=( const readWriteLockBase & ) = delete;
102 readWriteLockBase( const readWriteLockBase & ) = delete;
103 };
104
105
106 class readWriteLock : public readWriteLockBase {
107 public:
108 readWriteLock() {create(NULL);}
109 ~readWriteLock() {destroy();}
110 };
111
112
113
114 }
115
116
117
118 typedef pfc::mutexRecur critical_section;
119 typedef pfc::mutexRecurStatic critical_section_static;