MFC多线程学习笔记三:线程间的通信

使用全局变量进行通信

对于标准型的全局变量,建议使用volatile修饰符,告诉编译器无需优化(不放入寄存器),该值可以被外部改变。

如果线程间需要传递的信息比较复杂,可以使用结构,通过传递指向结构的指针来传递信息。

volatile修饰符

  1. 防止编译器优化
    声明为volatile的变量不会被编译器优化,每次访问都会直接读取内存值,避免因优化导致的数据不一致问题。 ‌12

  2. 保证内存可见性
    在多线程环境中,volatile变量的修改会立即同步到主内存,其他线程能读取到最新值,解决线程间数据不一致问题。 ‌34

  3. 禁止指令重排序
    通过插入内存屏障,防止编译器或处理器对volatile变量相关指令进行重排序,确保程序执行顺序符合预期。

https://blog.csdn.net/hd51cc/article/details/155131444?sharetype=blogdetail&sharerId=155131444&sharerefer=PC&sharesource=hd51cc&spm=1011.2480.3001.8118

如链接示例中

volatile bool bExit1 = false;
volatile bool bExit2 = false;

...


void CMFCApplDlg::OnPriorityThread1()
{
	int prior;
	//线程存在
	if (m_pThread1 && !bExit1)
	{
		prior = m_pThread1->GetThreadPriority();
		if (prior == THREAD_PRIORITY_NORMAL )
		{
			m_pTh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值