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

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值