首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么锁不锁?

为什么锁不锁?
EN

Stack Overflow用户
提问于 2014-03-05 16:15:51
回答 1查看 44关注 0票数 1

我有一个最低限度的代码:

代码语言:javascript
复制
#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;
}

我编译并运行

代码语言:javascript
复制
g++ -std=c++11 test_mutex.cc -o test_mutex && ./test_mutex

我得到了这个输出:

代码语言:javascript
复制
3
4
1
2
5

为什么?

我希望程序在打印"1“之后锁定,永远不会返回。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-05 16:22:49

从30.4.1 (“互斥要求”)起:

表达式m.lock()应格式良好,并具有以下语义: 要求:如果mstd::mutexstd::timed_mutex类型,则调用线程不拥有互斥对象。

您违反了这些要求,因此您不能期望标准所保证的任何行为。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22203168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档