gpt4 book ai didi

c++ - 如果我在锁定互斥锁之前解锁它可以吗?

转载 作者:行者123 更新时间:2023-11-30 01:33:56 25 4
gpt4 key购买 nike

我之前写过一些代码,但我意识到它的代码风格很糟糕,所以我改变了它。

我更改了 if block 内的 A.unlock。我知道如果 if never run 那么这个线程将解锁不属于它自己的互斥量然后它会返回一个未定义的行为。我的问题是,如果它返回未定义的行为,这里的逻辑是否仍然有效?因为如果线程 t1 没有锁,t1 解锁互斥量 A 将返回未定义的行为并且互斥量仍将由持有它的线程持有,对吗?并且不会影响这段代码中的其他逻辑。我的旧代码与我将解锁部分放在 if block 中一样。所以这就是为什么我很好奇这是如何工作的。

mutex A;
if(something)
{
A.lock();
}
A.unlock();

最佳答案

调用unlock时在互斥量上,互斥量必须由当前线程拥有,否则行为未定义。未定义的行为意味着任何事情都可能发生,包括程序看似正确运行、程序崩溃或其他地方的内存损坏以及问题直到后来才可见。

通常不直接使用互斥体;其他标准类之一(如 std::unique_lockstd::lock_guard 用于管理它。这样您就不必担心解锁互斥锁。

关于c++ - 如果我在锁定互斥锁之前解锁它可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57236963/

25 4 0