C++ 浅说Windows多线程临界区域(Critical Section)
2013-10-31 15:12
375 查看
临界区域: 简单的说, 是一种多线程数据同步的控制方式。
可以把它想像成一扇门,没人用的时候门是大家先到先进,进去了之后门关上,后面的人排队等前面的人出来才能进入
1. 大家都通过同一扇门用同样的东西EnterCriticalSection(LPCRITICAL_SECTION lpCriticalSection),有人在门里,就等待
2. 用完东西后,就出门(LeaveCriticalSection),后面的人又可以进去了。
临界区域控制法并没有保存任何变量,它只是设置了一道门,通过门来控制访问人员。
下面是临界区域锁封装和简单的控制示例:
可以把它想像成一扇门,没人用的时候门是大家先到先进,进去了之后门关上,后面的人排队等前面的人出来才能进入
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/C++ Windows API——多线程加锁与临界区域
- C++多线程(Windows)
- windows下c++编写多线程
- windows qt 使用c++ posix接口编写多线程程序(真神奇)good
- C++多线程(一) windows.h
- windows下C++多线程
- C++在Windows环境下多线程自动锁的实现
- c++临界区域-加锁
- windows下c++编写多线程
- windows下c++编写多线程
- C++ windows多线程 线程描述了进程内代码的执行路径。进程中同时可以有多个线程在执行,为了使他们能够同时运行,操作系统为每个线程轮流分配CPU时间片,为了充分地利用CPU提高软件产品的性能,一
- windows下 C++ 多线程+使用互斥资源(购票程序为例)
- windows 系统下C++实现的多线程
- windows qt 使用c++ posix接口编写多线程程序(一)
- [windows C/C++]面试准备(二)多线程面试题1
- 【转】Windows的多线程编程,C/C++
- 在Windows下使用Dev-C++开发基于pthread.h的多线程程序【转】
- Windows下C++实现多线程之线程同步
- windows下C++多线程学习之一(多线程基础)
- Windows 下 C/C++ 多线程编程入门参考范例