这是升级标准库锁的有效方法吗?

Is this a valid way to upgrade a standard library lock?

C++ 标准库缺少 upgrade_lock 方法,类似于 boost thread 提供的方法。但是看看 adopt_lock 设施,人们可能会想做以下事情:

// Declare a shared mutex
std::shared_mutex mtx;

// Create a reader lock 
std::shared_lock rlock(mtx);

// Other code and program logic ...

// Adopt the lock into a unique lock
std::unique_lock wlock(mtx, std::adopt_lock);
// Disassociate the reader lock to avoid doubly unlocking
rlock.unlock(); 

这有效/安全吗?如果没有,是否有解决此问题的通用做法?

来自标准:

unique_lock(mutex_type& m, adopt_lock_t);

Preconditions: The calling thread holds a non-shared lock on m.

所以没有。