mfc c++ 多线程同步 关键性代码段CRITICAL SECTION(二)
来源:互联网 发布:驾校考试预约软件 编辑:程序博客网 时间:2024/05/22 00:13
在mfc多线程,当多个线程都想访问同一个资源时,会导致线程冲突,数据出错,所以在多线程中,当一个线程对共享资源进行操作时,其余线程需要进行等待,当该线程完成操作时,才能占用该资源进行操作。
Critical Section,临界区,就是在线程中执行这样的操作,对关键性代码段进行保护,避免数据混乱。
例子:
int a ,进入线程后进行a++,当多个线程同时运行,进行a++操作时,变量a的数据会变得无序混乱
所以,使用Critical Section对a++进行保护,每次只能一个线程进行a++操作。
代码:
引入
# include “windows.h”
static UINT MarkBtmThread1(LPVOID param11); //声明线程1
static UINT MarkBtmThread2(LPVOID param22); //声明线程2
CRITICAL_SECTION g_Lock; //定义全局变量锁
volatile bool g_bCheckCard1 = true; //设置标志位
volatile bool g_bCheckCard2 = true;
int a =0;
新建按钮事件
void CMSI_VC_DemoDlg::OnBnClickedAutoMark()
{
if(g_bCheckCard1==true)
{
InitializeCriticalSection(&g_Lock); //初始化线程保护结构
AfxBeginThread(MarkBtmThread1,this,THREAD_PRIORITY_HIGHEST);//线程1入口
}
if(g_bCheckCard2==true)
{
InitializeCriticalSection(&g_Lock); //初始化线程保护结构
AfxBeginThread(MarkBtmThread2,this, THREAD_PRIORITY_HIGHEST ); //线程2入口
}
}
UINT CMSI_VC_DemoDlg::MarkBtmThread1(LPVOID param11)
{
CMSI_VC_DemoDlg dlg = (CMSI_VC_DemoDlg)param11;
int iR = GetNextText(); //进入加锁函数
}
UINT CMSI_VC_DemoDlg::MarkBtmThread2(LPVOID param22)
{
CMSI_VC_DemoDlg dlg = (CMSI_VC_DemoDlg)param22;
int iR = GetNextText(); //进入加锁函数
}
int GetNextText() //加锁函数
{
EnterCriticalSection(&g_Lock); //加锁
a++;
LeaveCriticalSection(&g_Lock); //解锁
}
- mfc c++ 多线程同步 关键性代码段CRITICAL SECTION(二)
- C++多线程安全性,原子代码段,Critical section应用
- 关键代码段 Critical Section
- MFC线程(二):线程同步临界区CRITICAL SECTION
- MFC线程(二):线程同步临界区CRITICAL SECTION
- 关键段(Critical Section)
- WIN32多线程三 线程同步机制Critical Section(转)
- 【Windows核心编程学习笔记】用户模式下的线程同步之二---关键段(critical section)
- 多线程售票同步代码段(二)
- 多线程--同步(Critical Section临界区)
- 引用 多线程--同步(Critical Section临界区)
- 关键段Critical Section
- 多线程之临界区(Critical Section)
- C++多线程-Critical Section
- 学习笔记 -- Win32多线程程序设计(三) 同步机制 Critical section and Mutex
- 多线程的同步critical section类的用法与解析
- 多线程的同步 critical section 类的用法与解析
- 多线程的同步 critical section 类的用法与解析
- TP5 控制器Controller中URL,跳转和重定向
- C++ explicit关键字详解(转载)
- ActiveMQ 项目实战
- Keepalived+Ceph RBD配置NFS的高可用
- 赛斯特牵手中企动力创新营销服务增强核心竞争力
- mfc c++ 多线程同步 关键性代码段CRITICAL SECTION(二)
- OSGI开发指导
- Java中的四种内部类
- 命令收集ESXi日志
- Android Studio如何断开SVN.
- Base64编码实现三---使用com.sun.org.apache.xerces.internal.impl.dv.util.Base64实现Base64
- 中国计算机类核心期刊
- node.js代理转发get和post,拦截指定api下发的自定义数据
- mac 下自动化签名android。apk