您的位置:首页 > 其它

100分求教一个最简单的CRITICAL_SECTION问题

2007-01-15 12:52 260 查看
今天发现自己工程里同步使用CRITICAL_SECTION变量的地方根本就没有锁住,  
InitializeCriticalSection(  )变量后,不管多少次EnterCriticalSection(  )都能进去  
 
调试很久不知道是哪里的问题,写了个最简单的测试程序(win32控制台程序,使用mfc库),  
还是有问题.测试程序如下  
 
#include  "stdafx.h"  
#include  "testLock.h"  
 
#ifdef  _DEBUG  
#define  new  DEBUG_NEW  
#undef  THIS_FILE  
static  char  THIS_FILE[]  =  __FILE__;  
#endif  
 
CWinApp  theApp;  
using  namespace  std;  
 
int  _tmain(int  argc,  TCHAR*  argv[],  TCHAR*  envp[])  
{  
           int  nRetCode  =  0;  
 
           //  initialize  MFC  and  print  and  error  on  failure  
           if  (!AfxWinInit(::GetModuleHandle(NULL),  NULL,  ::GetCommandLine(),  0))  
           {  
                       //  TODO:  change  error  code  to  suit  your  needs  
                       cerr  <<  _T("Fatal  Error:  MFC  initialization  failed")  <<  endl;  
                       nRetCode  =  1;  
           }  
           else  
           {  
                       //  TODO:  code  your  application's  behavior  here.  
                       CString  strHello;  
                       strHello.LoadString(IDS_HELLO);  
                       cout  <<  (LPCTSTR)strHello  <<  endl;  
           }  
 
           CRITICAL_SECTION  Sec;              
           InitializeCriticalSection(  &Sec  );  
             
           EnterCriticalSection(  &Sec  );      ///能调用返回,返回后  
                                                                                 ///Sec.LockCount=0,RecursionCount=1  
 
           EnterCriticalSection(  &Sec  );      ///还是能返回,没招,返回后  
                                                                                 ///Sec.LockCount=1,RecursionCount=2  
 
           return  nRetCode;  
}  
 
有经验的大侠指点下,不胜感激~~  
---------------------------------------------------------------  
 
CRITICAL_SECTION  CriticalSection;    
 
//  Initialize  the  critical  section.  
InitializeCriticalSection(&CriticalSection);    
 
//  Request  ownership  of  the  critical  section.  
__try    
{  
       EnterCriticalSection(&CriticalSection);    
 
       //  Access  the  shared  resource.  
}  
__finally    
{  
       //  Release  ownership  of  the  critical  section.  
       LeaveCriticalSection(&CriticalSection);  
 
       //  Release  resources  used  by  the  critical  section  object.  
       DeleteCriticalSection(&CriticalSection)  
}  
---------------------------------------------------------------  
 
都不理解CRITICAL_SECTION  用来什么的.    
 
所谓CRITICAL_SECTION  是用来处理"一份被共享的资源",  如一段内存,  一个数据结构,一个文件等.也就是资源每一次,同一个时间只能被一个线程处理.  
 
简单的讲,  CRITICAL_SECTION  用来保护资源,  当一个线程对某资源A写的时候,  避免别的线程对资源A进行任何操作.  就是保护数据的一致性.  
 
你刚刚用的在同一线程.  没有用...  
 
多线程才使用..  
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: