EnterCriticalSection单线程不会阻塞

[ At 2014/3/4 By wukong   0 comments ]

移植windows程序到linux,用pthread_mutex_lock替换了EnterCriticalSection后,原本没问题的逻辑出现了问题,调试发现程序在同一个现成里因为二次pthread_mutex_lock同一个pthread_mutext_t,造成了阻塞。而windows下的EnterCriticalSection多次操作不LeaveCriticalSection却不会阻塞,前提是在一个线程内,EnterCriticalSection只会在不同的线程从左同一个CRITICAL_SECTION对象时造成阻塞等待。。。写了测试代码验证了这个问题,代码如下

 

 
  1. CRITICAL_SECTION m_cs;
  2. static UINT __stdcall aaa(void*data)
  3. {
  4.     EnterCriticalSection(&m_cs);
  5.     MessageBox(NULL, "多线程的走不到这里的"""0);
  6.     return 0;
  7. }
  8. int APIENTRY _tWinMain(HINSTANCE hInstance,
  9.                      HINSTANCE hPrevInstance,
  10.                      LPTSTR    lpCmdLine,
  11.                      int       nCmdShow)
  12. {
  13.  
  14.     InitializeCriticalSection(&m_cs);
  15.     EnterCriticalSection(&m_cs);
  16.     EnterCriticalSection(&m_cs);
  17.     EnterCriticalSection(&m_cs);
  18.     MessageBox(NULL, "单线程的走到这里没问题"""0);
  19.  
  20.     UINT   ThreadID;
  21.     _beginthreadex(NULL, 0, aaa, NULL, 0, &ThreadID );
  22. //www.7es.cn悟空的博客提供的部分测试代码,看个大概意思就行了,运行的话需要自己稍微修改下

 

« sem_timedwait精确到毫秒的linux信号量阻塞等待ubuntu linux编译libcurl安装使用方法 »
  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By 空空如也 

Copyright 2018 www.7es.cn . Some Rights Reserved. Email:iamwgh@msn.com