如何解锁boost::upgrade_to_unique_lock(由boost::shared_mutex生成)
How to unlock boost::upgrade_to_unique_lock (made from boost::shared_mutex)?
所以我有一些shared_mutex,然后这样做:
boost::upgrade_lock<boost::shared_mutex> lock(f->mutex);
boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
现在我想"解锁它",或者至少把它降级为:
boost::shared_lock<boost::shared_mutex> lock_r(f->mutex);
如何做这样的事情?这可能吗?
如果您让upgrade_to_unique_lock
超出范围,它将自动降级回升级所有权。
void foo() {
boost::upgrade_lock<boost::shared_mutex> lock(f->mutex);
// Do shared operations, as mutex is held upgradeable
// ...
if(need_to_get_unique)
{
boost::upgrade_to_unique_lock<boost::shared_mutex> uniqueLock(lock);
// Do exclusive operations, as mutex is held uniquely
// ...
// At end of scope unique is released back to upgradeable
}
// Only shared operations here, as it's only held upgradeable
// ...
// At end of scope mutex is completely released
}
编辑:还有一件事。如果给定的函数只需要排他锁,则可以唯一地使用boost::unique_lock
和锁,而不需要同时使用upgrade
和upgrade_to_unique
锁。
相关文章:
- boost::asio如何生成多个协同程序,然后加入它们
- 为boost::dynamic_bitset生成哈希,并将哈希转换回boost::dynamic_bitset
- 如何使用 boost/operator.hpp 自动生成 == 运算符?
- 生成一个使用 boost 的 .cu 文件
- boost.python模块扩展生成SIGSEGV
- 有没有办法为使用 Boost 生成的进程创建新的控制台窗口
- 尝试使用生成文件编译程序时"fatal error: boost/regex.hpp: No such file or directory" C++
- 当我使用py 生成时,然后在macOS上boost.python包装器时,我会发现有关std :: string的错
- Boost Karma:当boost ::可选时,生成默认文本
- 在生成文件中使用 c++ Boost
- Eclipse中的Boost TestRunner无法生成有效的XML
- CMake 没有将 boost 目录包含在它生成的项目中
- 使用Boost.Preprocessor生成类模板的一组标记和索引的专门化
- 使用 Boost.Random 从种子生成多精度整数
- 在使用 BOOST 图形库生成的图形中添加随机边
- 通过允许用户选择顶点数量,使用Boost库生成图形
- 使用boost生成适当数量的令牌
- 有关使用 boost 生成正常随机数的问题
- 使用使用 Boost 生成的 Python 模块:与C++签名不匹配
- 使用boost生成介于1和9999之间的随机数