线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法
注:使用结构CRITICAL_SECTION 需加入头文件#include “afxmt.h”
定义一个全局的锁 CRITICAL_SECTION的实例
和一个静态全局变量
- CRITICAL_SECTION cs;//可以理解为锁定一个资源
- static int n_AddValue = 0;//定义一个静态的全部变量n_AddValue
创建两个线程函数,代码实现如下:
- //第一个线程
- UINT FirstThread(LPVOID lParam)
- {
- EnterCriticalSection(&cs);//加锁 接下来的代码处理过程中不允许其他线程进行操作,除非遇到LeaveCriticalSection
- for(int i = 0; i<10; i++){
- n_AddValue ++;
- cout << "n_AddValue in FirstThread is "<<n_AddValue <<endl;
- }
- LeaveCriticalSection(&cs);//解锁 到EnterCriticalSection之间代码资源已经释放了,其他线程可以进行操作
- return 0;
- }
- //第二个线程
- UINT SecondThread(LPVOID lParam)

本文介绍了Windows编程中线程同步的重要函数EnterCriticalSection和LeaveCriticalSection的使用方法,通过示例展示了如何避免全局变量在多线程环境下并发访问的问题。详细解释了将锁置于for循环内外对线程执行顺序的影响。
最低0.47元/天 解锁文章
560

被折叠的 条评论
为什么被折叠?



