Mutex Locker utility class to lock/unlock mbed RTOS mutexes. Create and pass a mutex, it locks the mutex then unlocks it when destroyed.
Dependents: SmartLight HelloThreadsYo
Mutex Locker
This utility class is most useful when you have an activity that needs to be protected by a mutex that has multiple return points.
You would normally do this:
Using standard mutex access
Mutex myMutex; void do_some_stuff() { myMutex.lock(); /* Do Stuff */ if (condition) { myMutex.unlock(); return 0; } /* Call other method */ int temp = other_method(); // Temp so can unlock after function returns myMutex.unlock(); return temp; }
However, it's very easy to miss one of the unlock points which would later freeze the application.
Debugging this kind of error can be very hard.
The same example using MutexLocker:
Using a MutexLocker
Mutex myMutex; int do_some_stuff() { MutexLocker locker(myMutex); /* Do Stuff */ if (condition) { return 0; } /* Call other method */ return other_method(); /* Mutex unlocks itself here */ }
No matter where or how your method returns, the mutex will always be unlocked as the MutexLocker goes out of scope.
Revision 3:aab6944f2ed3, committed 2014-04-10
- Comitter:
- Tomo2k
- Date:
- Thu Apr 10 22:18:40 2014 +0000
- Parent:
- 2:8bf85ca6ccee
- Commit message:
- Disabled copy and assignment as this would be silly
Changed in this revision
mutexlocker.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 8bf85ca6ccee -r aab6944f2ed3 mutexlocker.h --- a/mutexlocker.h Thu Apr 10 22:14:23 2014 +0000 +++ b/mutexlocker.h Thu Apr 10 22:18:40 2014 +0000 @@ -24,4 +24,7 @@ } private: Mutex &m_mutex; + // Disable copy + MutexLocker & operator=(const MutexLocker&); + MutexLocker(const MutexLocker &); };