#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--; }