我有一个最低限度的代码:
#include <mutex>
#include <iostream>
std::mutex themutex;
void f1()
{
std::cout << "1" << std::endl;
std::lock_guard<std::mutex> local_mutex(themutex);
std::cout << "2" << std::endl;
}
void f2()
{
std::cout << "3" << std::endl;
std::lock_guard<std::mutex> local_mutex(themutex);
std::cout << "4" << std::endl;
f1();
std::cout << "5" << std::endl;
}
int main(void)
{
f2();
return 0;
}我编译并运行
g++ -std=c++11 test_mutex.cc -o test_mutex && ./test_mutex我得到了这个输出:
3
4
1
2
5为什么?
我希望程序在打印"1“之后锁定,永远不会返回。
发布于 2014-03-05 16:22:49
从30.4.1 (“互斥要求”)起:
表达式
m.lock()应格式良好,并具有以下语义: 要求:如果m是std::mutex或std::timed_mutex类型,则调用线程不拥有互斥对象。
您违反了这些要求,因此您不能期望标准所保证的任何行为。
https://stackoverflow.com/questions/22203168
复制相似问题