临界区

来源:互联网 发布:plsql 导入excel数据 编辑:程序博客网 时间:2024/04/27 23:35

临界区机制是保证在某一时刻只有一个线程能访问数据的简便方法,即在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在一个线程进入后其他所有试图访问此临界区的线程被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到原子方式操作共享资源的目的。

下面是一个windows下使用临介区访问共享数据的多线程例子:

#include<windows.h>
#include<iostream>
using namespace std;

CRITICAL_SECTION cs;
int critical_value=0;
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
 for(int i=0;i<5;i++)
 {
  EnterCriticalSection(&cs);
  critical_value++;
  printf("critical_value=%d\n",critical_value);
  LeaveCriticalSection(&cs);
 }
 return 1;
}
int main()
{
 HANDLE hThread1;
 HANDLE hThread2;
 UINT uThreadID;
 InitializeCriticalSection(&cs);
 hThread1=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
 hThread2=CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
 CloseHandle(hThread1);
 CloseHandle(hThread2);
 DeleteCriticalSection(&cs);
 return 0;
}