Пример #1
0
//**********************************************
void write_unlock(void *vlock)
{
    rwl_lock_t *lock = (rwl_lock_t *)vlock;

   //assert((AO_load(&lock->reader_count_and_flag) & RWL_ACTIVE_WRITER_FLAG) != 0);
    AO_fetch_and_add_full(&lock->reader_count_and_flag, -1);
}
Пример #2
0
//**********************************************
void read_unlock(void *vlock)
{
    rwl_lock_t *lock = (rwl_lock_t *)vlock;

    //assert((AO_load(&lock->reader_count_and_flag) & RWL_ACTIVE_WRITER_FLAG) == 0);
    AO_fetch_and_add_full(&(lock->reader_count_and_flag), -RWL_READ_INC);
}
Пример #3
0
	void dontIncludeInCounts()
		{
		if (!mDontIncludeInCounts)
			AO_fetch_and_add_full(&mCounts, -1);

		mDontIncludeInCounts = true;
		}
Пример #4
0
	InstanceCounter() : mDontIncludeInCounts(false)
		{
		AO_fetch_and_add_full(&mCounts, 1);

		LOG_DEBUG << "Create " 
			<< Ufora::debug::StackTrace::demangle(typeid(T).name()) 
			<< ". Total = " << totalCount();
		}
Пример #5
0
	virtual ~InstanceCounter()
		{
		if (!mDontIncludeInCounts)
			AO_fetch_and_add_full(&mCounts, -1);

		LOG_DEBUG << "Destroy " 
			<< Ufora::debug::StackTrace::demangle(typeid(T).name()) 
			<< ". Total = " << totalCount();
		}
Пример #6
0
//**********************************************
void read_lock(void *vlock)
{
    rwl_lock_t *lock = (rwl_lock_t *)vlock;

    Thread_Stats[STAT_READ]++;
    AO_fetch_and_add_full(&(lock->reader_count_and_flag), RWL_READ_INC);
    while (AO_load(&(lock->reader_count_and_flag)) & RWL_ACTIVE_WRITER_FLAG)
    {
        // wait
        Thread_Stats[STAT_RSPIN]++;
    }
    //assert((AO_load(&lock->reader_count_and_flag) & RWL_ACTIVE_WRITER_FLAG) == 0);
}