// Critsetion.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <process.h>
using
namespace
std;
CRITICAL_SECTION g_cs;
char
name[]=
"zhangdongsheng"
;
unsigned __stdcall ThreadPoc1(
void
* pArguments)
{
while
(1)
{
EnterCriticalSection(&g_cs);
//如果此处不对全局变量name进行加锁
//那么输出结果将有可能出现不一致现象
memset
(name,0,
sizeof
(name));
strcpy
(name,
"Thread1"
);
Sleep(600);
cout<<
"Thread1 "
<<name<<endl;
LeaveCriticalSection(&g_cs);
}
return
0;
}
unsigned __stdcall ThreadPoc2(
void
* pArguments)
{
while
(1)
{
EnterCriticalSection(&g_cs);
memset
(name,0,
sizeof
(name));
strcpy
(name,
"Thread2"
);
Sleep(500);
cout<<
"Thread2 "
<<name<<endl;
LeaveCriticalSection(&g_cs);
}
return
0;
}
int
_tmain(
int
argc, _TCHAR* argv[])
{
InitializeCriticalSection(&g_cs);
HANDLE
hThread1=(
HANDLE
)_beginthreadex(NULL,0,ThreadPoc1,NULL,0,NULL);
HANDLE
hThread2=(
HANDLE
)_beginthreadex(NULL,0,ThreadPoc2,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
while
(1)
{
Sleep(500);
}
DeleteCriticalSection(&g_cs);
return
0;
}
|
不加锁会出现不一致的情况
加锁后: