boost::mutex提供了跨平台的锁操作,不允许多个线程同时访问共享资源,从而确保共享资源不被脏写。在本文中仅仅是介绍简单的两种锁,最高效的锁boost::mutex和区域锁boost::mutex::scoped_lock
boost::mutex例子
#include <boost/thread/mutex.hpp>
boost::mutex m_mutexAccessServiceManager;
void CSettingCenter::ClearPlatformServiceInfoCache()
{
m_mutexAccessServiceManager.lock();
m_mapAccessServiceManager.clear();
m_mutexAccessServiceManager.unlock();
}
区域锁boost::mutex::scoped_lock顾名思义就是在作用域内有效,当离开作用域自动释放锁,传递参数是锁
区域锁就是把锁封装到一个对象里面。锁的初始化放到构造函数,锁的释放放到析构函数。这样当锁离开作用域时,
析构函数会自动释放锁。即使运行时抛出异常,由于析构函数仍然会自动运行,所以锁仍然能自动释放。一个典型的区域锁
void CSettingCenter::ClearPlatformServiceInfoCache()
{
boost::mutex::scoped_lock lock(m_mutexAccessServiceManager);
m_mapAccessServiceManager.clear();
}
应用于有大量的return返回的代码,避免出现死锁的问题