多线程6:线程间的同步机制1


前言

多线程6:线程间的同步机制1


一、线程同步的必要性

C/C++会先被转化为汇编,然后转化为二进制代码,再被CPU执行。在进行多线程的时候,如果多个线程同时去访问一个全局变量,而其中某一个线程正在修改全局变量的值,那么CPU进行线程的调度的时候,可能会让该线程停止运行,让另一个线程先去运行。那么这个另一个线程也要去修改全局变量的值的话就可能会存在问题:多个线程都需要去修改这个全局变量,就可能会造成冲突。举个例子来说就像公共设施一样,某个公共设施同一时间只能让一个人使用,那么其他人看到这个公共设施已经有人使用的时候就会排队等候,当没有人使用的时候再去按顺序使用。在多线程中,线程1在修改全局变量的时候,其他线程应该等候,等线程1修改完毕之后,其他线程再来修改,其他线程在等候的时候可以去进行其他的操作或运算。说白了就是当某一个东西大家都要使用的时候,要按照规则依次使用,否则就会发生混乱。

二、没进行多线程同步的异常现象

对于某个全局的数值变量来说,一般不会对程序造成异常,但是会导致数值不准确。如果对于某一个类对象的成员变量,可能会引起程序的异常或者一些不确定的错误。

1.全局的数值变量

这里新创建一个MFC工程,并在主对话框上新建一个按钮1,命名为“没进行多线程同步的异常现象(全局的数值变量)”,并添加其点击消息响应函数
在这里插入图片描述
按钮1的点击响应函数和子线程函数如下

//没进行多线程同步的异常现象--------------------------------------------

int g_Num = 0;
UINT __cdecl ThreadProc1(LPVOID lpParameter)
{
   
   
	for (int idx = 0; idx < 100; idx++)
	{
   
   
		g_Num = g_Num + 1;
		CString str;
		str.Format(_T("%d"), g_Num);
		g_Num = g_Num - 1;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能与优化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值