BaseObject.cpp 768 Bytes
#include "BaseObject.h"

CBaseObject::CBaseObject()
{
	m_cur_count = 0;
	pthread_mutex_init(&m_mutex, NULL);
}

CBaseObject::~CBaseObject()
{
	pthread_mutex_destroy(&m_mutex);
}

void CBaseObject::Lock()
{
	if (m_cur_count == 0)
	{
		pthread_mutex_lock(&m_mutex);
		m_cur_thread_id = pthread_self();
		asm("nop");
		m_cur_count = 1;
	}
	else
	{
		pthread_t cur_thread_id = pthread_self();
		if (cur_thread_id == m_cur_thread_id)
		{
			m_cur_count++;
		}
		else
		{
			pthread_mutex_lock(&m_mutex);
			m_cur_thread_id = pthread_self();
			asm("nop");
			m_cur_count = 1;
		}
	}
}

void CBaseObject::Unlock()
{
	if (m_cur_count == 1)
	{
		m_cur_count--;
		pthread_mutex_unlock(&m_mutex);
	}
	else
		m_cur_count--;

}