这是升级标准库锁的有效方法吗?
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.
所以没有。
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.
所以没有。