为了账号安全,请及时绑定邮箱和手机立即绑定

如何在C ++中处理可移动类型中的互斥锁?

如何在C ++中处理可移动类型中的互斥锁?

C++
MMMHUHU 2019-11-12 09:26:30
通过设计,std::mutex既不能移动,也不能复制。这意味着A持有互斥量的类将不会收到default-move-constructor。如何使这种类型A以线程安全的方式移动?
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

鉴于似乎没有一个很好的,干净的,简单的方法来回答这个问题-我认为安东的解决方案是正确的,但肯定值得商,,除非出现更好的答案,否则我建议将此类放在堆上并照看它通过std::unique_ptr:


auto a = std::make_unique<A>();

它现在是完全可移动的类型,并且在发生移动时在内部互斥锁上处于锁定状态的任何人仍然是安全的,即使它是否是一件好事也存在争议


如果您需要复制语义,请使用


auto a2 = std::make_shared<A>();


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 509 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信