临界区,可以看作是对一个需要操作共享变量的代码段,在多线程并发的情况下,为了不至于某个线程会取得脏数据,需要控制同一时刻( 这里用时刻好象不太确切,应该说,某个线程处理这个共享变量到一半,时间片到,而得到时间片的线程也要对这个共享变量进行操作 )进入临界区的线程.
在Win32中,有一个CRITICAL_SECTION变量,你需要做的就是在建立该变量后通过它来为资源声明一个保护,示例程序如下:
DWORD WINAPI ThreadFunc( LPVOID n ){
EnterCriticalSection( &critical_sec );
cout<<"abcdefgh"<<endl;
LeaveCriticalSection( &critical_sec );
return 0;
}
如果你在主线程中,启动多个以上这样的子线程,没有设置为临界区的化,输出的字母会变的凌乱不堪,因为流是共享资源,如果有多个填充流的线程操作,肯定会使得每个线程都无法得到预期的结果.
但是如果将对于输出流的操作编写为临界区,那么线程一旦开始对输出流进行操作,必然会完成它,因为一旦有线程霸占临界区,其他线程是无法再进入的.