1. 新建一个基于对话框的应用程序
2. 在主对话框类中添加以下代码:
volatile int flag=1;
volatile bool bRun=true;
CRITICAL_SECTION g_cs;//关键代码段,临界区
UINT A(LPVOID p)
{
while(bRun){
EnterCriticalSection(&g_cs);
if(1==flag){
flag=2;
TRACE("A");
Sleep(1);
}
LeaveCriticalSection(&g_cs);
}
return 0;
}
UINT B(LPVOID p)
{
while(bRun){
EnterCriticalSection(&g_cs);
if(2==flag){
flag=3;
TRACE("B");
Sleep(1);
}
LeaveCriticalSection(&g_cs);
}
return 0;
}
UINT C(LPVOID p)
{
while(bRun){
EnterCriticalSection(&g_cs);
if(3==flag){
flag=1;
TRACE("C\n");
Sleep(1);
}
LeaveCriticalSection(&g_cs);
}
return 0;
}
BOOL CTDlg::OnInitDialog()
{
...
// TODO: Add extra initialization here
InitializeCriticalSection(&g_cs);
AfxBeginThread(A,this);
AfxBeginThread(B,this);
AfxBeginThread(C,this);
return TRUE;
}
void CTDlg::OnButton1() //退出线程
{
bRun=false;
}
3. 以调试状态运行,结果如下: