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.

History

Disabled copy and assignment as this would be silly default tip

2014-04-10, by Tomo2k [Thu, 10 Apr 2014 22:18:40 +0000] rev 3

Disabled copy and assignment as this would be silly


Update documentation

2014-04-10, by Tomo2k [Thu, 10 Apr 2014 22:14:23 +0000] rev 2

Update documentation


Lighter weight

2014-04-10, by Tomo2k [Thu, 10 Apr 2014 22:06:40 +0000] rev 1

Lighter weight


Simple mutex locker

2014-04-10, by Tomo2k [Thu, 10 Apr 2014 21:59:11 +0000] rev 0

Simple mutex locker