Mark3 Realtime Kernel
readerwriter.h
Go to the documentation of this file.
1 /*===========================================================================
2  _____ _____ _____ _____
3  ___| _|__ __|_ |__ __|__ |__ __| __ |__ ______
4 | \ / | || \ || | || |/ / ||___ |
5 | \/ | || \ || \ || \ ||___ |
6 |__/\__/|__|_||__|\__\ __||__|\__\ __||__|\__\ __||______|
7  |_____| |_____| |_____| |_____|
8 
9 --[Mark3 Realtime Platform]--------------------------------------------------
10 
11 Copyright (c) 2012 - 2019 m0slevin, all rights reserved.
12 See license.txt for more information
13 ===========================================================================*/
21 #pragma once
22 
23 #include "mark3cfg.h"
24 #include "blocking.h"
25 #include "mutex.h"
26 
27 namespace Mark3
28 {
41 {
42 public:
43  void* operator new(size_t sz, void* pv) { return reinterpret_cast<ReaderWriterLock*>(pv); }
44 
50  void Init();
51 
58  void AcquireReader();
59 
68  bool AcquireReader(uint32_t u32TimeoutMs_);
69 
74  void ReleaseReader();
75 
82  void AcquireWriter();
83 
92  bool AcquireWriter(uint32_t u32TimeoutMs_);
93 
98  void ReleaseWriter();
99 
100 private:
107  bool AcquireReader_i(uint32_t u32TimeoutMs_);
114  bool AcquireWriter_i(uint32_t u32TimeoutMs_);
115 
118  uint8_t m_u8ReadCount;
119 };
120 
121 } // namespace Mark3
The ReaderWriterLock class. This class implements an object that marshalls access to a resource based...
Definition: readerwriter.h:40
uint8_t m_u8ReadCount
Number of concurrent readers.
Definition: readerwriter.h:118
Mutex m_clGlobalMutex
Mutex used to lock the object against concurrent read + write.
Definition: readerwriter.h:116
Blocking object base class declarations.
void ReleaseWriter()
ReleaseWriter Release the currently held writer, allowing other readers/writers to access the object...
Definition: atomic.cpp:23
Mark3 Kernel Configuration This file is used to configure the kernel for your specific application in...
The Mutex Class. Class providing Mutual-exclusion locks, based on BlockingObject. ...
Definition: mutex.h:63
bool AcquireReader_i(uint32_t u32TimeoutMs_)
AcquireReader_i Internal helper function for AcquireReaer.
void Init()
Init Initialize the reader-writer lock before use. Must be called before attempting any other operati...
void AcquireReader()
AcquireReader Acquire the object&#39;s reader lock. Multiple concurrent readers are allowed. If the writer lock is currently held, the calling thread will wait until the writer lock is relinquished.
void AcquireWriter()
AcquireWriter Acquire the writer lock. Only a single writer is allowed to access the object at a time...
Mutual exclusion class declaration Resource locks are implemented using mutual exclusion semaphores (...
bool AcquireWriter_i(uint32_t u32TimeoutMs_)
AcquireWriter_i Internal helper function for AcquireWriter.
void ReleaseReader()
ReleaseReader Release a previously-held reader lock.
Mutex m_clReaderMutex
Mutex used to lock object for readers.
Definition: readerwriter.h:117