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; }
相关文章推荐
- c++实现socket通信测试
- STL中map的使用
- ASP.NET中在不同的子域中共享Session
- java.lang.NoClassDefFoundError
- 在ubuntu12.04上用qvfb运行QtE程序
- C++ 随机函数
- 使用python进行加密解密AES算法
- C# 线程有参和无参启动
- python 登录人人网。。。
- 设计模式(c++)笔记之十四(Strategy模式)
- 图像处理 加法练习 Matlab 图像叠加求平均去噪
- org.springframework.dao.InvalidDataAccessApiUsageException问题解决
- 联通SGIP1.2短信接口 Java版实现 总结 2013-10-23测试通过
- C语言调用Lua函数
- javaJDK64位下载
- Google Ads Encryption Key
- Eclipse工程部署
- C++虚基类
- 如何有效阅读源代码
- java矩阵包