Visual Studio 2012 中的 c++11 std::mutex 编译器错误

2023-12-01

这是一个关于 C++11 标准中死锁的探索。

在《C++ Concurrency in Action》的 sec3.2.4 中,有一个示例 防止多线程死锁。对于没有这本书的人来说, 另外,还有一个几乎类似的例子可以参考:http://en.cppreference.com/w/cpp/thread/lock_tag

我遇到的问题是这两个代码的代码都会出现编译错误 在 Visual Studio 2012 中。错误消息是:

'std::mutex::mutex': cannot access private member declared in class 'std::mutex'

这个问题也发生在以下比 cppreference.com 更简单的代码中:

struct bank_account {
    std::mutex m;
};
void transfer(bank_account &from, bank_account &to)
{
    std::lock(from.m, to.m);
}
int _tmain(int argc, _TCHAR* argv[])
{
    bank_account my_account;
    bank_account your_account;

    std::thread t1(transfer, my_account, your_account);  // compiler-error!

    std::system("pause");
    return 0;
}

有办法在 Visual Studio 2012 中解决这个问题吗?


mutexes不可复制或分配,并且std::thread构造函数正在尝试复制。您可以通过使用来规避此问题std::reference_wrapper via std::ref:

std::thread t1(transfer, std::ref(my_account), std::ref(your_account));

或者,您可以通过临时bank_accounts:

std::thread t1(transfer, bank_account(), bank_account());

这很可能会导致bank_accounts被“移动”而不是被复制,尽管也有可能通过以下方式避免复制复制省略.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Visual Studio 2012 中的 c++11 std::mutex 编译器错误 的相关文章

随机推荐

  • 如何可视化 chrome DevTool 协议消息日志?

    我使用 Selenium 和 Chrome 驱动程序 还启用了性能日志记录 以便更好地了解测试期间的问题 性能日志似乎是一个 json 数组 其中包含 chrome 的 DevTool 协议消息 是否有任何工具可以让我像 Chrome 的开
  • Swift 中的单例用法

    我仍然对使用 Swift 感到有点困惑 希望有人能帮助澄清我何时以及为何使用它们 根据我对 Singleton 的理解 它们是单类实体 这意味着如果我有 A 类 并且在 B 类中创建 A 类的共享实例 那么它只是 B 中对 A 类的引用 所
  • 如何根据日期值将列表的元素插入另一个列表?

    我有一份房屋清单 list1 home1 home2 home3 home4 我还有另一份具体房屋清单 list2 home6 home7 home8 home10 每个家都有一块田地date 我想插入List2 into list1根据h
  • UIViewController诞生的过程是怎样的(哪个方法遵循哪个)?

    有很多方法可以覆盖 例如initWithNibname awakeFromNib loadView viewDidLoad viewDidAppear layoutSubviews 我只是无法决定调用这些方法的顺序 我只是 用心 重写其中一
  • Linq orderby 对多列进行排序,其中一列可能为 null

    我有一个表 其中有 2 个字段 名称 和 订单 订单 可以为空 使用 LINQ 我希望能够按 Order 排序 或者如果 Order 为 null 则按 Name 排序 这是我的非工作代码 from ft in FacetTypes ord
  • 关于@symbol对JSON key的影响

    我的 JSON 结构如下 var myJSON userTypes type Array type Administrator Customer Guest 当我尝试访问时myJSON userType
  • 在已经使用 bootstrap 库的情况下,如何添加 jquery ui 日期选择器?

    我正在使用 bootstrap 我打算使用它向页面添加一个日期选择器 但没有成功 所以我使用查询 ui 找到了日期选择器的代码 日期选择器 并在新的 html 页面中尝试了此操作 效果非常好 但是 我现在想在我正在处理的页面中使用它 但不同
  • 如何在用户关闭应用程序 JFrame 之后、程序退出之前直接保存一些对象?

    再会 我正在使用扩展 JFrame 的 NetBeans IDE 开发一个小型 Java 应用程序 我实现了几种关闭应用程序的方法 例如按Ctrl Q并按 JFrame 的 X 但在实际关闭之前 我希望程序为我执行一些额外的代码 以保存应用
  • ANTLR - 输入错误不匹配

    我有一个语法 如下所示 由特定语言的注释和控制语句组成 Grammar grammar DD ddlist ddstmt jclcomment ddstmt dd1 dd2 dd3 dd4 dd1 JCLBEGIN ddname DDWOR
  • 如何将半圆蒙版应用于 ImageView

    我有一个图像 一个半圆形框架图像 我需要将该图像放入该框架内 但我需要对图像应用蒙版 以便它仅显示在框架内 例如 这是我的图像 而我想要的结果应该是这样的 红框也是内部透明的图像视图 我怎样才能在Android中实现这一点 有一个很棒的教程
  • YouTube 可以直接上传到所有用户的通用帐户吗?

    是否可以配置 YouTube Direct 以便将视频上传到一个中央帐户而不是单个用户的帐户 我们已经有了自己的身份验证流程 不希望客户登录我们的系统 然后登录 Google 上传视频 我们可以拥有自己的视频捕获系统 将视频录制到我们的服务
  • 将结果存入变量

    我有以下示例代码 我可以通过打印功能在控制台中看到正确的结果 Define a model for linear regression const model tf sequential model add tf layers dense
  • 谷歌日历 API 令牌将在 7 天后过期

    I used 本指南创建 Google 日历OAuth2客户端 ID 和客户端密钥 然后 我使用 gcalcli 命令创建 API 访问令牌 gcalcli noauth local webserver client id clientid
  • Firebase:限制同一电话号码或同一设备的短信数量

    我们正在尝试在我们的 Android 应用程序中实现 firebase 电话身份验证 如此处所述link 它在我们的应用程序中运行良好 服务器端验证也按预期工作 现在我们想为同一电话号码或同一设备添加每日短信数量限制 以防止滥用 链接引用
  • 使用 VADump 跟踪内存使用情况 - OpenProcess 失败 c0000034

    读完一篇最新一期 MSDN 杂志中的文章 我想尝试使用 VADump 来分解我编写的一些应用程序的内存使用情况 我的电脑上唯一的可执行文件副本位于 c Program Files Microsoft Visual Studio 8 Comm
  • 使用 jq 处理巨大的 GEOJson 文件

    给定一个 GEOJson 文件如下 type FeatureCollection features type Feature properties FEATCODE 15014 geometry type Polygon coordinat
  • Java 计算百分比的算术

    我的 java 应用程序有一个小问题 我必须计算他们完成后的分数 我使用这个方法 public Float ScoreProcent int questions int correct Float x new Float questions
  • Phantomjs 与 Facebook 的 SSL 握手失败 [重复]

    这个问题在这里已经有答案了 我正在尝试使用 phantomjs 为 Facebook 构建一个网络抓取工具 由于 SSL 握手失败 连接失败 我在 Twitter 上得到了相同的结果 但谷歌工作正常 有谁知道这个问题的解决方案 我正在运行
  • Jinja2 中的 zip(list1, list2) ?

    我正在 Jinja2 中进行代码生成 并且经常想一起迭代两个列表 即变量名称和类型 是否有一种简单的方法可以做到这一点 或者我是否需要传递一个预压缩列表 我在中找不到这样的功能docs或谷歌搜索 修改jinja2 Environment全局
  • Visual Studio 2012 中的 c++11 std::mutex 编译器错误

    这是一个关于 C 11 标准中死锁的探索 在 C Concurrency in Action 的 sec3 2 4 中 有一个示例 防止多线程死锁 对于没有这本书的人来说 另外 还有一个几乎类似的例子可以参考 http en cpprefe