public member function
<mutex>
explicit operator bool() const noexcept;
Return whether it owns a lock
Return value
true
is the object owns a lock on the managed mutex object.
false
otherwise.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
// unique_lock::operator= example
#include <iostream> // std::cout
#include <vector> // std::vector
#include <thread> // std::thread
#include <mutex> // std::mutex, std::unique_lock, std::try_to_lock
std::mutex mtx; // mutex for critical section
void print_star () {
std::unique_lock<std::mutex> lck(mtx,std::try_to_lock);
// print '*' if successfully locked, 'x' otherwise:
if (lck)
std::cout << '*';
else
std::cout << 'x';
}
int main ()
{
std::vector<std::thread> threads;
for (int i=0; i<500; ++i)
threads.emplace_back(print_star);
for (auto& x: threads) x.join();
return 0;
}
| |
Possible output (the amount of 'x' -if any- may vary):
***********************************x*****x******************x*******************
****************x**x*x*x***x***x************************x**************x********
********************************************************************************
********************************************************************************
****************************************************************x***************
***x****************************************************************************
******x**********x**
|
Data races
The unique_lock object is accessed.
Its managed mutex object is not accessed by the operation.
Exception safety
No-throw guarantee: never throws exceptions.