在涉及到多线程操作的时候,对于那些静态变量我们一定要加以保护。我们通常会使用到的是互斥锁,通过对锁的获取和释放来保证始终只有一个线程对关键数据进行操作,但这样带来的问题也是很直接的: 繁琐的操作。
1. 首先我们先定义一个互斥锁的类,
class EfMutex
{
public:
EfMutex(int type = PTHREAD_MUTEX_RECURSIVE) : _type(type), _owner(0), _count(0)
{
minit();
}
virtual ~EfMutex(void)
{
pthread_mutex_destroy(&_mutex);
return ;
}
bool mtake(void)
{
int nStatus = pthread_mutex_lock(&_mutex);
if(0 != nStatus)
{
char cMessage[1024] = "Uninitialized";
std::cerr << __PRETTY_FUNCTION__ <<": (" << nStatus << ") "
<< strerror_r(nStatus, cMessage, sizeof(cMessage))
<<std::endl;
assert(false);
}
else
{
_owner = pthread_self();
_count+