All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
AndroidSharedGlContextUsageGuard.h
1 #pragma once
2 
3 #include <pthread.h>
4 
5 namespace Eegeo
6 {
7  namespace Android
8  {
10  {
11  public:
12 
14 
15  virtual void AcquireContextReadLock() = 0;
16  virtual void ReleaseContextReadLock() = 0;
17  virtual void AcquireContextWriteLock() = 0;
18  virtual void ReleaseContextWriteLock() = 0;
19  };
20 
22  {
23  public:
24 
26  {
27  pthread_rwlock_init(&m_contextReaderWriterLock, nullptr);
28  }
29 
31  {
32  pthread_rwlock_destroy(&m_contextReaderWriterLock);
33  }
34 
35  void AcquireContextReadLock() override
36  {
37  pthread_rwlock_rdlock(&m_contextReaderWriterLock);
38  }
39 
40  void ReleaseContextReadLock() override
41  {
42  pthread_rwlock_unlock(&m_contextReaderWriterLock);
43  }
44 
45  void AcquireContextWriteLock() override
46  {
47  pthread_rwlock_wrlock(&m_contextReaderWriterLock);
48  }
49 
50  void ReleaseContextWriteLock() override
51  {
52  pthread_rwlock_unlock(&m_contextReaderWriterLock);
53  }
54 
55  private:
56 
57  pthread_rwlock_t m_contextReaderWriterLock;
58  };
59 
61  {
62  public:
63 
65  : m_guard(guard)
66  {
67  m_guard.AcquireContextWriteLock();
68  }
69 
71  {
72  m_guard.ReleaseContextWriteLock();
73  }
74 
75  private:
76 
78  };
79  }
80 }