首先来看几个例子,这个几个例子都是错误的使用boost的mutex。根本原因是对加锁原理认识不清楚。
BAD1:
ShareData.h用于定义共享数据
#ifndef __SHARE_DATA_H__
#define __SHARE_DATA_H__
namespace BOOST_TEST
{
class CShareData
{
public:
CShareData(int nValue);
virtual ~CShareData();
int AddValue();
void PrintValue();
private:
int m_nValue;
};
typedef boost::shared_ptr<CShareData> CShareDataPtr;
}
#endif
ShareData.cpp
#include <iostream>
#include "ShareData.h"
#include "Log.h"
using namespace BOOST_TEST;
CShareData::CShareData(int nValue) : m_nValue(nValue)
{
}
CShareData::~CShareData()
{
}
int CShareData::AddValue()
{
return ++m_nValue;
}
void CShareData::PrintValue()
{
::std::cout << "value = " << m_nValue << ::std::endl;
}
BoostMutexTestThreadA.h
#ifndef __BOOST_MUTEX_TEST_THREADA_H__
#define __BOOST_MUTEX_TEST_THREADA_H__
#include "ThreadCommon.h"
#include "ShareData.h"
namespace BOOST_TEST
{
class CBoostMutexTestThreadA : public CTimerThreadBase
{
public:
CBoostMutexTestThreadA(CShareDataPtr ptrShareData);
virtual ~CBoostMutexTestThreadA();
public:
void ExecuteTask();
private:
boost::mutex m_objMutex;
CShareDataPtr m_ptrShareData;
};
typedef boost::shared_ptr<CBoostMutexTestThreadA> CBoostMutexTestThread