为什么要解锁未锁定的 std::mutex UB?

解锁std::mutex未锁定的 UB。为什么会这样?为什么它没有任何作用,因为互斥锁尚未锁定,或者已经解锁,那么再次调用解锁有什么危害?

回答

因为那会产生成本。这将要求每个实现都包含必要的内部检查以确保这种行为。

如果您想要一个具有这种行为的互斥锁,您可以编写一个代码。但是,您将必须支付额外支票的费用才能做到这一点。但是那些不需要这种行为的人就不会支付这些费用。

成本往往比您想象的要高。拥有互斥锁可以安全地访问受该互斥锁保护的所有内容。如果您没有互斥锁,则访问受该互斥锁保护的内容是不安全的。因此,在某些实现中,在释放互斥锁之前,这可能需要等同于获取互斥锁(以便您可以安全地访问互斥锁的所有权数据)。如果获取和释放互斥锁的成本相当,则解锁互斥锁的成本可能翻倍。哎呀。


以上是为什么要解锁未锁定的 std::mutex UB?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>