为Win32建立临界区

    临界区,可以看作是对一个需要操作共享变量的代码段,在多线程并发的情况下,为了不至于某个线程会取得脏数据,需要控制同一时刻( 这里用时刻好象不太确切,应该说,某个线程处理这个共享变量到一半,时间片到,而得到时间片的线程也要对这个共享变量进行操作 )进入临界区的线程.

    在Win32中,有一个CRITICAL_SECTION变量,你需要做的就是在建立该变量后通过它来为资源声明一个保护,示例程序如下:

 

 DWORD WINAPI ThreadFunc( LPVOID n ){

     EnterCriticalSection( &critical_sec );
     cout<<"abcdefgh"<<endl;
     LeaveCriticalSection( &critical_sec );
 
     return 0;
}

 

    如果你在主线程中,启动多个以上这样的子线程,没有设置为临界区的化,输出的字母会变的凌乱不堪,因为流是共享资源,如果有多个填充流的线程操作,肯定会使得每个线程都无法得到预期的结果.

    但是如果将对于输出流的操作编写为临界区,那么线程一旦开始对输出流进行操作,必然会完成它,因为一旦有线程霸占临界区,其他线程是无法再进入的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值