网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

C++怎么使用std::lock()或std::scoped_lock获取多个mutex

本篇内容主要讲解“C++怎么使用std::lock()或std::scoped_lock获取多个mutex”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么使用std::lock()或std::scoped_lock获取多个mutex”吧!

在石家庄等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站建设、成都网站制作 网站设计制作按需求定制开发,公司网站建设,企业网站建设,成都品牌网站建设,成都营销网站建设,外贸网站制作,石家庄网站建设费用合理。

CP.21:使用std::lock()或者std::scoped_lock获取多个mutex

Reason(原因)

To avoid deadlocks on multiple mutexes.

避免在多个mutex上发生死锁。

Example(实例)

This is asking for deadlock:

下面的代码会引发死锁:

// thread 1
lock_guard lck1(m1);
lock_guard lck2(m2);

// thread 2
lock_guard lck2(m2);
lock_guard lck1(m1);

Instead, use lock():

使用lock代替:

// thread 1
lock(m1, m2);
lock_guard lck1(m1, adopt_lock);
lock_guard lck2(m2, adopt_lock);

// thread 2
lock(m2, m1);
lock_guard lck2(m2, adopt_lock);
lock_guard lck1(m1, adopt_lock);

or (better, but C++17 only):

或者(可以更好,但仅限于C++17)

// thread 1
scoped_lock lck1(m1, m2);

// thread 2
scoped_lock lck2(m2, m1);

Here, the writers of thread1 and thread2 are still not agreeing on the order of the mutexes, but order no longer matters.

这里,thread1和thread2的作者仍然没有在获取mutex的顺序上取得一致,但是顺序已经不再重要。

Note(注意)

在实际的代码中,mutex的命名很少能向程序员提示希望的关系和希望的请求次序。在实际的代码中,mute不会总是在相邻代码中执行获取,那样的话问题可能更容易被发现。

In C++17 it's possible to write plain

在C++17可以简单地这样写:

lock_guard lck1(m1, adopt_lock);

and have the mutex type deduced.

这样就可以实现mutex类型推断。

Enforcement(实施建议)

Detect the acquisition of multiple mutexes. This is undecidable in general, but catching common simple examples (like the one above) is easy.

检查多重mutex获取操作。这一点通常是不可判定的,但是捕捉一般的简单例子(例如上面的例子)是容易做到的。

到此,相信大家对“C++怎么使用std::lock()或std::scoped_lock获取多个mutex”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


网页题目:C++怎么使用std::lock()或std::scoped_lock获取多个mutex
路径分享:http://bjjierui.cn/article/gcppod.html

其他资讯