Search code examples
c++locking

Create shared_lock or unique_lock based on a condition


I need to create unique_lock or shared lock based on a parameter in my function. I couldn't define properly in the scope of function. So I need to do something like this.

function (bool check) {
 lock;
 if (check) {
  lock = std::unique_lock<std::shared_mutex>(mutex);
 } else {
  lock = std::shared_lock<std::shared_mutex>(mutex);
 }
 lock.lock();
 doTask....

Solution

  • Like this?

    void function (bool check) {
      std::unique_lock<std::shared_mutex> u(mutex, std::defer_lock);
      std::shared_lock<std::shared_mutex> s(mutex, std::defer_lock);
      if (check) {
        u.lock();
      } else {
        s.lock();
      }
      doTask....