[英]What is the equivalent of boost::upgrade_to_unique_lock in STL?
[英]std library equivalent to boost::upgrade_lock and boost::upgrade_to_unique_lock
我刚刚完成了使用 std 库删除 boost 依赖项的任务。 我遇到了 upgrade_lock 和 upgrade_to_unique_lock 并且想知道是否有等效的标准库 class?
从shared_mutex
上的 cppreference :
共享互斥锁不支持从共享所有权模式直接转换到唯一所有权模式:必须先使用 unlock_shared() 放弃共享锁,然后才能使用 lock() 获得独占所有权。 boost::upgrade_mutex 可用于此目的。
所以不行。
Howard Hinnant 提出的shared_mutex
的最初提案N3568还包含一个upgrade_mutex
提案,它正好填补了这个空白。 然而,并发小组反对将upgrade_mutex
引入 C++14。 因此,霍华德编写了N3569 ,其中仅包含shared_mutex
。 该提案被 C++17 接受。
霍华德在此答案中给出了删除的更详细原因,并表示他不会投入时间和精力来使upgrade_mutex
标准化。 可悲的是,它可能永远不会被标准化。
通常我会建议为此使用 Boost。 由于您明确想要替换 Boost,因此没有太多选择。
一种是使用目标操作系统提供的方法,这种方法是不可移植的,可能不是您想要的。 如果您的<mutex>
实现提供std::mutex::native_handle()
,这将变得更容易。
您也可以编写自己的解决方案,查看 Howard 的upgrade_mutex
参考实现。 请注意,您不能将其与 std::lib 直接结合,因为 N3568 会向std::unique_lock
添加七个构造函数,而用户代码显然无法做到这一点。 因此,您需要将<mutex>
的适当许可实现克隆到您自己的命名空间中,将其与参考实现结合起来,然后将这些构造函数添加到您实际需要的unique_lock
中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.