4

我想将我的代码从 boost-threads 移动到 std-threads。虽然我认为这应该很简单,但我遇到了奇怪的问题。下面的代码是一个使用 VS2012 触发断言“f:\dd\vctools\crt_bld\self_x86\crt\src\thr\mutex.c(131):unlock of unowned mutex”的最小示例。搜索这个会显示较旧的错误报告(我认为)应该已经修复。

int result = 0;
std::mutex m;
m.lock();
std::thread t1([&](){
    result = 42;
    m.unlock();
});
m.lock();
std::cout << result << std::endl;
t1.join();

有人可以向我解释为什么这不起作用吗?

谢谢

4

1 回答 1

11

m.unlock()要求调用线程拥有互斥锁。您的代码不满足该要求(因为unlock()ing 线程从不调用m.lock()),因此程序的行为未定义。

于 2013-01-07T18:49:26.077 回答