std::mutex::unlock (3) - Linux Man Pages

std::mutex::unlock: std::mutex::unlock

NAME

std::mutex::unlock - std::mutex::unlock

Synopsis


void unlock(); (since C++11)


Unlocks the mutex.
The mutex must be locked by the current thread of execution, otherwise, the behavior is undefined.
This operation synchronizes-with (as defined in std::memory_order) any subsequent lock operation that obtains ownership of the same mutex.

Parameters


(none)

Return value


(none)

Exceptions


(none)

Notes


unlock() is usually not called directly: std::unique_lock and std::lock_guard are used to manage exclusive locking.

Example


This example shows how lock and unlock can be used to protect shared data.
// Run this code


  #include <iostream>
  #include <chrono>
  #include <thread>
  #include <mutex>


  int g_num = 0; // protected by g_num_mutex
  std::mutex g_num_mutex;


  void slow_increment(int id)
  {
      for (int i = 0; i < 3; ++i) {
          g_num_mutex.lock();
          ++g_num;
          std::cout << id << " => " << g_num << '\n';
          g_num_mutex.unlock();


          std::this_thread::sleep_for(std::chrono::seconds(1));
      }
  }


  int main()
  {
      std::thread t1(slow_increment, 0);
      std::thread t2(slow_increment, 1);
      t1.join();
      t2.join();
  }

Possible output:


  0 => 1
  1 => 2
  0 => 3
  1 => 4
  0 => 5
  1 => 6

See also


         locks the mutex, blocks if the mutex is not available
lock (public member function)
         tries to lock the mutex, returns if the mutex is not available
try_lock (public member function)