首页 > 编程语言 > 详细

多线程执行过程分析1 | C#

时间:2021-06-28 19:42:30      阅读:27      评论:0      收藏:0      [点我收藏+]

在使用多个线程读写同一个变量时,可能会出现与预期不符的情况。

线程的执行顺序每次都可能不一样,因为顺序由操作系统调度顺序决定。

//多线程读写测试函数
private static void MultiThreadsRW()
{
	int i;
	i = 0;

	Thread t1 = new Thread(new ThreadStart(() =>
	{
		int j=5;
		while (j--!=0)
		{
			i++;
			WriteLine($"{i} (t1)");
		}
	}));

	Thread t2 = new Thread(new ThreadStart(() =>
	{
		int j=5;
		while (j--!=0)
		{
			i++;
			WriteLine($"{i} (t2)");
		}
	}));

	t1.Start();
	t2.Start();

	WriteLine(i);
}

执行过程分析:

执行结果:
技术分享图片
(前面数字为i的输出值,括号中是线程的编号)

执行过程:
i的初始值为0

  1. t2线程中执行i++,并输出i的值i=i+1=0+1=1
  2. t1线程中执行i++,没有输出,t2执行i++,即此时i=i+2=1+2=3,并输出
  3. t2中执行i++,此时i=i+1=3+1=4,由t2输出
  4. & 5. 同3.,执行完后i=6
  5. 调度主线程输出未改变的i值(读取i时还未被其他线程修改)
  6. t1线程沿步骤2中的暂停点继续执行,输出i++后的值(此处的i值还是步骤1执行完后的值),i=i+1=1+1=2
  7. t1线程读取i值(此时全局的i=6),执行i++,i=i+1=6+1=7
  8. & 10. & 11. 同步骤8,i++执行3次同时输出(8,9,10),最后一次:i=i+3=7+3=10,输出10

多线程执行过程分析1 | C#

原文:https://www.cnblogs.com/zokf7cc/p/14944287.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!