-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathpthread_mutex.hpp
66 lines (53 loc) · 1.56 KB
/
pthread_mutex.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#ifndef PTHREADMUTEX_H
#define PTHREADMUTEX_H
//#include <mutex>
////#include <shared_mutex>
//
//typedef std::mutex PthreadMutex;
//typedef std::mutex PthreadRwMutex;
////typedef std::shared_mutex PthreadRwMutex;
//typedef std::lock_guard<std::mutex> PthreadGuard;
//typedef std::lock_guard<std::mutex> PthreadReadGuard;
//typedef std::lock_guard<std::mutex> PthreadWriteGuard;
////typedef std::shared_lock<std::shared_mutex> PthreadReadGuard;
////typedef std::unique_lock<std::shared_mutex> PthreadWriteGuard;
#include <pthread.h>
#include "pthread_spin_lock.h"
//#include "log.h"
class PthreadRwMutex
{
public:
PthreadRwMutex(){pthread_spin_init(&mutexlock, 0);}
virtual ~PthreadRwMutex(){pthread_spin_destroy(&mutexlock);}
void ReadLock(){
pthread_spin_lock(&mutexlock);
//MY_METHOD("lock at mutex: 0x%08llx", (unsigned long long)&mutexlock);
}
void WriteLock(){
pthread_spin_lock(&mutexlock);
//MY_METHOD("lock at mutex: 0x%08llx", (unsigned long long)&mutexlock);
}
void Unlock(){
//MY_METHOD("unlock at mutex: 0x%08llx", (unsigned long long)&mutexlock);
pthread_spin_unlock(&mutexlock);
}
private:
pthread_spinlock_t mutexlock;
};
class PthreadReadGuard
{
public:
PthreadReadGuard(PthreadRwMutex& m){mutex = &m; mutex->ReadLock();}
virtual ~PthreadReadGuard(){mutex->Unlock();}
private:
PthreadRwMutex* mutex;
};
class PthreadWriteGuard
{
public:
PthreadWriteGuard(PthreadRwMutex& m){mutex = &m; mutex->WriteLock();}
virtual ~PthreadWriteGuard(){mutex->Unlock();}
private:
PthreadRwMutex* mutex;
};
#endif /* PTHREADMUTEX_H */