std::recursive_mutex能否被可靠地使用?
关于
std::recursive_mutex的安全使用疑问 std::recursive_mutex的cppreference页面指出:
recursive_mutex可被锁定的最大次数未指定,但达到该次数后,调用lock会抛出std::system_error,调用try_lock会返回false。
由此衍生出以下推论:
- 若按字面意思理解,由于最大锁定次数可能为0,那么使用(锁定)
std::recursive_mutex完全不安全。 - 但这种解读或许过于极端,或许应假设最大次数至少为1,且可能恰好为1?在这种情况下,
std::recursive_mutex可以像std::mutex一样安全使用,但永远不能递归使用(即同时锁定两次),因为最大次数可能为1。 - 但这种解读仍可能过于保守,或许应假设最大次数至少为2,且可能恰好为2?此时可以锁定两次,但锁定3次则不安全。
上述推论愈发牵强,最终似乎会得出结论:std::recursive_mutex缺乏明确约定,因此完全无法安全使用。也就是说,若需要可靠的递归互斥锁,必须自行实现。
(尝试处理std::system_error并非现实可行的方案,因为直接从头实现替代的递归互斥锁比使用std::recursive_mutex更简单。)
这未免可惜,因为实际上std::recursive_mutex可能是高质量的实现,其最大锁定次数可能为数百、数千、数十亿(比如2³¹-1)甚至千万亿(比如2⁶³-1),只要能可靠依赖,这些数值都颇具实用价值。
那么,是否存在安全、可靠的std::recursive_mutex使用方式?
内容的提问来源于stack exchange,提问作者Don Hatch
相关产品推荐
相关产品推荐

