【发布时间】:2020-12-14 10:56:11
【问题描述】:
我正在尝试将现有的 Windows 代码移植到适用于 Windows 和 Linux 的通用代码。 将 CRITICAL_SECTION 替换为 std::mutex。代码失败并出现错误:“unlock of unowned mutex”。这只发生在调试版本而不是发布版本。
这里是观察行为的示例代码:
#include "pch.h"
#include <iostream>
#include <mutex>
static std::mutex g_suCxioAccessLock;
int main()
{
std::unique_lock<std::mutex> locker(g_suCxioAccessLock);
std::cout << "Hello World!\n";
g_suCxioAccessLock.unlock();
}
你能帮我理解为什么它在调试构建中失败
【问题讨论】:
-
使用
locker.unlock()。您将互斥锁交给了unique_lock。用它来解锁它(或者只是让它离开作用域;也就是说,毕竟是基于作用域的锁定点)。