|
Open Model Railroad Network (OpenMRN)
|
Go to the source code of this file.
Classes | |
| class | OSThread |
| This class provides a threading API. More... | |
| struct | OSThread::ScopedSetThreadHandle |
| Helper class for using lock_to_thread. More... | |
| class | OSThreadOnce |
| This class provides support for one time initialization. More... | |
| class | OSSem |
| This class provides a counting semaphore API. More... | |
| class | OSMQ |
| This class provides a simple message queue. More... | |
| class | OSMutex |
| This class provides a mutex API. More... | |
| class | OSMutexLock |
| Class to allow convenient locking and unlocking of mutexes in a C context. More... | |
| class | OSTime |
Macros | |
| #define | OSMutexLock(l) int error_omitted_mutex_lock_variable[-1] |
| This catches programming errors where you declare a mutex locker object without a name like this: | |
Variables | |
| long long | rtcOffset |
| Allows for OS abstracted access to time. | |
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
This file represents a C++ language abstraction of common operating system calls.
Definition in file OS.hxx.
| #define OSMutexLock | ( | l | ) | int error_omitted_mutex_lock_variable[-1] |
This catches programming errors where you declare a mutex locker object without a name like this:
void foo() { OSMutexLock(&mutex_); // ...critical section here... }
The above is valid C++, which creates a temporary OSMutexLock object, locks it, then immediately destructs the object, unlocking the mutex in the same line it was created. Thus the critical sections goes unprotected unintentionally.
The correct code is
void foo() { OSMutexLock locker(&mutex_); // ...critical section here... }