扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
boost::mutex提供了跨平台的锁操作,不允许多个线程同时访问共享资源,从而确保共享资源不被脏写。在本文中仅仅是介绍简单的两种锁,最高效的锁boost::mutex和区域锁boost::mutex::scoped_lock
10年积累的成都网站制作、成都做网站、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有新乐免费网站建设让你可以放心的选择与我们合作。boost::mutex例子
#include
boost::mutex m_mutexAccessServiceManager;
void CSettingCenter::ClearPlatformServiceInfoCache()
{
m_mutexAccessServiceManager.lock();
m_mapAccessServiceManager.clear();
m_mutexAccessServiceManager.unlock();
}
区域锁boost::mutex::scoped_lock顾名思义就是在作用域内有效,当离开作用域自动释放锁,传递参数是锁。区域锁就是把锁封装到一个对象里面。锁的初始化放到构造函数,锁的释放放到析构函数。这样当锁离开作用域时,
析构函数会自动释放锁。即使运行时抛出异常,由于析构函数仍然会自动运行,所以锁仍然能自动释放。一个典型的区域锁
void test()
{
boost::mutex::scoped_lock lock(m_mutexAccessServiceManager);
m_mapAccessServiceManager.clear();
}
应用于有大量的return返回的代码,避免出现死锁的问题
扩展
std::scoped_lock提供了可变参数长度的构造器,接收多个锁。允许在可能导致死锁的状态下,对多个互斥量加锁。例如:
{
// safely locked as if using std::lock
std::scoped_lock
}
目前std::lock_guard已经被废弃,GCC7已经完整支持
friend void swap(X& lhs, X& rhs)
{
if (&lhs == & rhs)
return;
std::lock(lhs.m, rhs.m);
std::lock_guard
std::lock_guard
swap(lhs.some_detail, rhs.some_detail);
}
friend void swap(X& lhs, X& rhs)
{
if (&lhs == &rhs)
return;
std::scoped_lock guard(lhs.m, rhs.m);
swap(lhs.some_detail, rhs.some_detail);
}
引用
https://stackoverflow.com/questions/43019598/stdlock-guard-or-stdscoped-lock
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流