gpt4 book ai didi

c++ - 为什么 libc++ 允许递归锁定 std::mutex?

转载 作者:行者123 更新时间:2023-12-02 02:25:37 25 4
gpt4 key购买 nike

std::mutex 是非递归的,违反它是 UB。所以理论上一切皆有可能(包括作为 std::recursive_mutex)),但 libc++ seems to work fine , 这个程序输出

bye

#include <iostream>
#include <mutex>

std::mutex m;
int main() {
std::scoped_lock l1(m);
std::scoped_lock l2(m);
std::cout << "bye" << std::endl;
}

这是 libc++ 中的故意设计决定还是只是一些意外(例如,他们可以对互斥锁和 recursive_mutex 使用相同的逻辑)?

libstdc++ 挂起。

注意:我知道人们不应该依赖 UB,所以这与最佳实践无关,我只是对模糊的实现细节感到好奇。

最佳答案

这似乎不是有意设计的决定。 std::mutex 的 libc++ 实现只是平台 POSIX 默认互斥锁的包装器。由于如果递归锁定,它也被定义为具有 UB,因此它们只是继承了平台的默认 POSIX 互斥体也恰好允许递归锁定的事实。

关于c++ - 为什么 libc++ 允许递归锁定 std::mutex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65683044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com