No you can’t .
, , , , . , , ( ), , undefined.
recursive_mutex
:
#include <iostream>
#include <mutex>
#include <atomic>
class recursive_mutex
{
std::recursive_mutex _mutex;
std::atomic<unsigned> _counter;
public:
recursive_mutex() : _mutex(), _counter(0) {}
recursive_mutex(recursive_mutex&) = delete;
void operator=(recursive_mutex&) = delete;
void lock() { _mutex.lock(); ++_counter; }
bool try_lock() { bool result = _mutex.try_lock(); _counter += result; return result; }
void unlock() { --_counter; _mutex.unlock(); }
unsigned counter() { return _counter; }
};
int main() {
recursive_mutex m;
m.lock();
m.lock();
std::cout << m.counter() << "\n";
m.unlock();
std::cout << m.counter() << "\n";
m.unlock();
}
2
1