找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3353|回复: 0

ACE下的线程锁测试

[复制链接]
发表于 2013-9-12 09:49:37 | 显示全部楼层 |阅读模式
一直想单独测试一下ACE_Recursive_Thread_Mutex在不同操作系统下的稳定性。
于是趁早上刚到公司的闲暇时间,写了一个小测试用例。
  1. // ACE_MetuxTest.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "ace/Malloc.h"
  4. #include "ace/Malloc_T.h"
  5. #include "ace/Thread_Mutex.h"
  6. #include "ace/Singleton.h"
  7. #include "ace/OS_NS_Thread.h"
  8. #include "ace/Time_Value.h"
  9. #include "ace/Null_Mutex.h"
  10. #include "ace/OS_NS_unistd.h"
  11. class CTestMutex
  12. {
  13. public:
  14.         CTestMutex()
  15.         {
  16.                 m_nCount = 0;
  17.         }
  18.         void Add()
  19.         {
  20.                 ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadWriteLock);
  21.                 m_nCount++;
  22.         };
  23.         void Display()
  24.         {
  25.                 printf("[CTestMutex::Display]nCount=%d.\n", m_nCount);
  26.         }
  27. private:
  28.         ACE_Recursive_Thread_Mutex  m_ThreadWriteLock;
  29.         unsigned int m_nCount;
  30. };
  31. typedef ACE_Singleton<CTestMutex, ACE_Null_Mutex> App_TestMutex;
  32. //线程执行
  33. void* ThreadProc(void* argv)
  34. {
  35.         for(int i = 0; i < 1000; i++)
  36.         {
  37.                 App_TestMutex::instance()->Add();
  38.         }
  39.         return 0;
  40. }
  41. int main(int argc, char* argv[])
  42. {
  43.         for(int i = 0; i < 10; i++)
  44.         {
  45.                 //DWORD  ThreadID = 0;
  46.                 //CreateThread(NULL, NULL, ThreadProc, (LPVOID)NULL, NULL, &ThreadID);
  47.                 ACE_thread_t threadId;
  48.                 ACE_hthread_t threadHandle;
  49.                 ACE_Thread::spawn((ACE_THR_FUNC)ThreadProc,        //线程执行函数
  50.                         NULL,                       
  51.                         THR_JOINABLE | THR_NEW_LWP,
  52.                         &threadId,
  53.                         &threadHandle);               
  54.         }
  55.         ACE_Time_Value tvSleep(2, 0);
  56.         ACE_OS::sleep(tvSleep);
  57.         App_TestMutex::instance()->Display();
  58.         getchar();
  59.         return 0;
  60. }
复制代码
在linux下和windows下测试,都没问题。
在这里记录一下。



您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-29 14:06 , Processed in 0.011317 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表