现在的位置: 首页 > 综合 > 正文

C++多线程编程例子 Demo 关键代码段 临界区 实现线程同步

2013年11月11日 ⁄ 综合 ⁄ 共 806字 ⁄ 字号 评论关闭
DWORD WINAPI Fun1Proc(LPVOID lParam);
DWORD WINAPI Fun2Proc(LPVOID lParam);

int balance = 110;//账户余额[最少10元保底]
CRITICAL_SECTION critical;//代码临界区

/* 运用关键代码端[临界区]实现线程间同步 */
void main()
{
InitializeCriticalSection(&critical);
HANDLE hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//线程1存钱[每次存100元,账户最多110元]
HANDLE hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);//线程2取钱[每次取100元,账户至少留10元]
CloseHandle(hThread1);
CloseHandle(hThread2);

Sleep(5000);
DeleteCriticalSection(&critical);
}

DWORD WINAPI Fun1Proc(LPVOID lParam)
{
int i = 50;
while (i-- > 0)
{
EnterCriticalSection(&critical);
if (balance 0)
{
EnterCriticalSection(&critical);
if (balance-100<10)
{
printf("线程2:\t账户余额:%d元,余额不足,线程2不能取款,等待线程1存款...\n",balance);
LeaveCriticalSection(&critical);
continue;
}
printf("线程2:\t账户余额%d元,线程2取款100元\n",balance);
balance-=100;
LeaveCriticalSection(&critical);
}
return 0;
}

抱歉!评论已关闭.