<一>临界段
临界段对象通过提供所有线程必须共享的对象来控制线程。只有拥有临界段对象的线程才能够访问保护的资源。在另一个线程可以访问该资源之前,前一线程必须释放临界段对象,一遍新的线程可以获取对对象的访问权。
注意:互斥量是内核对象,可以跨进程使用,而临界段对象只能在进程内的线程间使用(虽然互斥量可以用于进程内的线程,但线程间的通信,互斥量没有临界段对象高效)。
与临界段有关的API函数
名称 | 作用 |
InitializeCriticalSection() | 创建一个临界段 |
DeleteCriticalSection() | 释放一个临界段 |
EnterCriticalSection() | 获取对临界段的所有权,独占共享资源 |
TryEnterCriticalSection() | 试图获得对临界段的所有权,但不阻塞 |
LeaveCriticalSection() | 释放对资源的所有权 |
例子:
#include <iostream> #include <windows.h> #include "process.h" using namespace std; CRITICAL_SECTION cs; int a[5],i; void Thread() { int num=0; while(true) { EnterCriticalSection(&cs); for (i=0;i<5;i++) { a[i]=num; } LeaveCriticalSection(&cs); num++; } } int main() { InitializeCriticalSection(&cs); CreateThread(0,0,(LPTHREAD_START_ROUTINE)Thread,0,0,0); while(true) { EnterCriticalSection(&cs); for (i=0;i<5;i++) { cout<<a[i]<<" "; } LeaveCriticalSection(&cs); } return 0; }