CriticalSection 例子

#include <windows.h>
#include 
<iostream>

using namespace  std;

DWORD WINAPI FunProc01(LPVOID lpParameter);
DWORD WINAPI FunProc02(LPVOID lpParameter);

int g_nTickets = 100
;
CRITICAL_SECTION g_cs;

int
 main()
{
    HANDLE    hThread01;
    HANDLE    hThread02;

    hThread01 
= CreateThread(NULL, 0, FunProc01, NULL, 0
, NULL);
    hThread02 
= CreateThread(NULL, 0, FunProc02, NULL, 0
, NULL);

    CloseHandle(hThread01);
    CloseHandle(hThread02);

    InitializeCriticalSection(
&
g_cs);

    
while (true
)
    {
        
if (g_nTickets > 0
)
        {
            Sleep(
100
);
        }
        
else

        {
            
break ;
        }
    }

    DeleteCriticalSection(
&
g_cs);
        
    
return 0
;
}

DWORD WINAPI FunProc01(LPVOID lpParameter)
{
    
while (true
)
    {
        EnterCriticalSection(
&
g_cs);
        Sleep(
1
);

        
if (g_nTickets > 0
)
        {
            Sleep(
1
);

            cout 
<< "Thread01 sales ticket " << g_nTickets <<
 endl;

            g_nTickets
--
;
        }

        LeaveCriticalSection(
&
g_cs);
    }

    
return 0
;
}

DWORD WINAPI FunProc02(LPVOID lpParameter)
{
    
while (true
)
    {
        EnterCriticalSection(
&
g_cs);
        Sleep(
1
);

        
if (g_nTickets > 0
)
        {
            Sleep(
1
);

            cout 
<< "Thread02 sales ticket " << g_nTickets <<
 endl;

            g_nTickets
--
;
        }

        LeaveCriticalSection(
&
g_cs);
    }

    
return 0
;
}

VS.net 2003 下结果:

Thread01 sales ticket 36
Thread02 sales ticket 35
Thread01 sales ticket 34
Thread02 sales ticket 33
Thread01 sales ticket 32
Thread02 sales ticket 31
Thread01 sales ticket 30
Thread02 sales ticket 29
Thread01 sales ticket 28
Thread02 sales ticket 27
Thread01 sales ticket 26
Thread02 sales ticket 25
Thread01 sales ticket 24
Thread02 sales ticket 23
Thread01 sales ticket 22
Thread02 sales ticket 21
Thread01 sales ticket 20
Thread02 sales ticket 19
Thread01 sales ticket 18
Thread02 sales ticket 17
Thread01 sales ticket 16
Thread02 sales ticket 15
Thread01 sales ticket 14
Thread02 sales ticket 13
Thread01 sales ticket 12
Thread02 sales ticket 11
Thread01 sales ticket 10
Thread02 sales ticket 9
Thread01 sales ticket 8
Thread02 sales ticket 7
Thread01 sales ticket 6
Thread02 sales ticket 5
Thread01 sales ticket 4
Thread02 sales ticket 3
Thread01 sales ticket 2
Thread02 sales ticket 1
Press any key to continue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值