C++ 浅说Windows多线程临界区域(Critical Section)
来源:互联网 发布:巨人网络私有化 编辑:程序博客网 时间:2024/06/05 16:06
临界区域: 简单的说, 是一种多线程数据同步的控制方式。
可以把它想像成一扇门,没人用的时候门是大家先到先进,进去了之后门关上,后面的人排队等前面的人出来才能进入
1. 大家都通过同一扇门用同样的东西EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection),有人在门里,就等待
2. 用完东西后,就出门(LeaveCriticalSection),后面的人又可以进去了。
临界区域控制法并没有保存任何变量,它只是设置了一道门,通过门来控制访问人员。
下面是临界区域锁封装和简单的控制示例:
/*Thread.cpp*/#include<stdio.h>#include<process.h>#include <Windows.h>#include <conio.h>//线程同步锁class CCriticalSectionLock { public: CCriticalSectionLock() { InitializeCriticalSection(&m_cs); } ~CCriticalSectionLock() { DeleteCriticalSection(&m_cs); } void Lock() { EnterCriticalSection(&m_cs); } void Unlock() { LeaveCriticalSection(&m_cs); } private: CRITICAL_SECTION m_cs; }; int n_AddValue = 0;CCriticalSectionLock g_lockAddValue;void Start1(void *arg){ for(int i = 0; i<10; i++){ g_lockAddValue.Lock(); n_AddValue ++; printf("n_AddValue in 1st is %d\n", n_AddValue); g_lockAddValue.Unlock(); } _endthread();}void Start2(void *arg){ for(int i = 0; i<10; i++){ g_lockAddValue.Lock(); n_AddValue ++; printf("n_AddValue in 2nd is %d\n", n_AddValue); g_lockAddValue.Unlock(); } _endthread();}void main(){ _beginthread(Start1,0,NULL); _beginthread(Start2,0,NULL); getch(); }
- C++ 浅说Windows多线程临界区域(Critical Section)
- Critical Section(关键区域,临界区域)
- Critical Section Objects(临界区域)的使用
- 多线程--同步(Critical Section临界区)
- 引用 多线程--同步(Critical Section临界区)
- 多线程之临界区(Critical Section)
- C语言 线程临界资源--critical section
- 临界区Critical Section
- 多线程(C++)临界区Critical Sections问题
- Windows线程同步之临界区对象(Critical Section)
- Windows线程同步--临界区对象(Critical Section Objects)
- Windows并发&异步编程(3)临界区Critical Section
- C++多线程-Critical Section
- 临界区(Critical section)与互斥量(Mutex)
- C/C++ Windows API——多线程加锁与临界区域
- windows critical section (关键段)
- 临界区(Critical section)与互斥体(Mutex)的区别
- 临界区(Critical section)与互斥体(Mutex)的区别
- PHP手册
- 获取音频文件的ID3信息
- python 时间操作
- jquery+xml+ajax 省市多级联动
- struts param 标签
- C++ 浅说Windows多线程临界区域(Critical Section)
- 建立博客网站六步骤
- STL容器之deque
- 个人不完全使用StreamBase的总结
- delete、drop和truncate区别
- 8 个必备的PHP功能开发
- 哲理微博
- 在window下间接使用meteorite的包管理功能
- 修改了settings.xml后无法生效