Listing 3: POSIX reference count implementation
////////////////////////////////////////////
// Copyright (c) Panos Kougiouris 1997
////////////////////////////////////////////
#include <kfReferenceCount.h>
#include <assert.h>
CKFReferenceCount::CKFReferenceCount()
{
m_count = 1;
pthread_mutex_init(&m_mutex, NULL);
}
//------------------------------------------
CKFReferenceCount::~CKFReferenceCount()
{
assert(m_count == 0);
pthread_mutex_destroy(&m_mutex);
}
//------------------------------------------
void
CKFReferenceCount::increment()
{
pthread_mutex_lock(&m_mutex);
m_count++;
pthread_mutex_unlock(&m_mutex);
}
//------------------------------------------
void
CKFReferenceCount::decrement()
{
pthread_mutex_lock(&m_mutex);
m_count--;
if (m_count == 0) {
delete this;
} else {
pthread_mutex_unlock(&m_mutex);
}
}
//------------------------------------------
int
CKFReferenceCount::count()
{
int ret;
pthread_mutex_lock(&m_mutex);
ret = m_count;
pthread_mutex_unlock(&m_mutex);
return ret;
}
//End of File