freeeyes 发表于 2013-9-12 09:49:37

ACE下的线程锁测试

一直想单独测试一下ACE_Recursive_Thread_Mutex在不同操作系统下的稳定性。
于是趁早上刚到公司的闲暇时间,写了一个小测试用例。// ACE_MetuxTest.cpp : 定义控制台应用程序的入口点。
//

#include "ace/Malloc.h"
#include "ace/Malloc_T.h"
#include "ace/Thread_Mutex.h"
#include "ace/Singleton.h"
#include "ace/OS_NS_Thread.h"
#include "ace/Time_Value.h"
#include "ace/Null_Mutex.h"
#include "ace/OS_NS_unistd.h"

class CTestMutex
{
public:
        CTestMutex()
        {
                m_nCount = 0;
        }

        void Add()
        {
                ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);
                m_nCount++;
        };

        void Display()
        {
                printf("nCount=%d.\n", m_nCount);
        }

private:
        ACE_Recursive_Thread_Mutexm_ThreadWriteLock;
        unsigned int m_nCount;
};

typedef ACE_Singleton<CTestMutex, ACE_Null_Mutex> App_TestMutex;

//线程执行
void* ThreadProc(void* argv)
{
        for(int i = 0; i < 1000; i++)
        {
                App_TestMutex::instance()->Add();
        }

        return 0;
}



int main(int argc, char* argv[])
{

        for(int i = 0; i < 10; i++)
        {
                //DWORDThreadID = 0;
                //CreateThread(NULL, NULL, ThreadProc, (LPVOID)NULL, NULL, &ThreadID);

                ACE_thread_t threadId;
                ACE_hthread_t threadHandle;

                ACE_Thread::spawn((ACE_THR_FUNC)ThreadProc,      //线程执行函数
                        NULL,                     
                        THR_JOINABLE | THR_NEW_LWP,
                        &threadId,
                        &threadHandle);               
        }

        ACE_Time_Value tvSleep(2, 0);
        ACE_OS::sleep(tvSleep);

        App_TestMutex::instance()->Display();
        getchar();

        return 0;
}
在linux下和windows下测试,都没问题。
在这里记录一下。



页: [1]
查看完整版本: ACE下的线程锁测试