您的位置:首页 > 编程语言

Windows环境下多线程编程原理与应用读书笔记(6)————临界段及其应用

2013-10-23 20:38 302 查看

<一>临界段

       临界段对象通过提供所有线程必须共享的对象来控制线程。只有拥有临界段对象的线程才能够访问保护的资源。在另一个线程可以访问该资源之前,前一线程必须释放临界段对象,一遍新的线程可以获取对对象的访问权。

注意:互斥量是内核对象,可以跨进程使用,而临界段对象只能在进程内的线程间使用(虽然互斥量可以用于进程内的线程,但线程间的通信,互斥量没有临界段对象高效)。

与临界段有关的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;
}

 

  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: