C语言中多线程的执行顺序难道不是你预期的吗?

2026-04-18 15:072阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2790个文字,预计阅读时间需要12分钟。

C语言中多线程的执行顺序难道不是你预期的吗?

目录+一个简单的例子+异常的输出结果+你看到的执行顺序不是真正的执行顺序+你看到的执行顺序还不一定是真正的执行顺序+C++多线程内存模型+一个简单的例子+先来看一个多线程的例子:

目录
  • 一个简单的例子
  • 诡异的输出结果
  • 你看到的执行顺序不是真的执行顺序
  • 你看到的执行顺序还不是真正的执行顺序
  • C++多线程内存模型

一个简单的例子

先来看一个多线程的例子:

如图所示,我们将变量x和y初始化为0,然后在线程1中执行:

x = 1, m = y;

同时在线程2中执行:

y = 1, n = x;

当两个线程都执行结束以后,m和n的值分别是多少呢?

对于已经工作了n年、写过无数次并发程序的的我们来说,这还不是小case吗?让我们来分析一下,大概有三种情况:

  • 如果程序先执行了x = 1, m = y代码段,后执行了y = 1, n = x代码段,那么结果是m = 0, n = 1;
  • 如果程序先执行了y = 1, n = x代码段,后执行了x = 1, m = y代码段,那么结果是m = 1, n = 0;
  • 如果程序的执行顺序先是 x = 1, y = 1, 后执行m = y, n = x, 那么结果是m = 1, n = 1;

所以(m, n)的组合一共有3种情况,分别是(0, 1), (1, 0)和(1, 1)。

阅读全文

本文共计2790个文字,预计阅读时间需要12分钟。

C语言中多线程的执行顺序难道不是你预期的吗?

目录+一个简单的例子+异常的输出结果+你看到的执行顺序不是真正的执行顺序+你看到的执行顺序还不一定是真正的执行顺序+C++多线程内存模型+一个简单的例子+先来看一个多线程的例子:

目录
  • 一个简单的例子
  • 诡异的输出结果
  • 你看到的执行顺序不是真的执行顺序
  • 你看到的执行顺序还不是真正的执行顺序
  • C++多线程内存模型

一个简单的例子

先来看一个多线程的例子:

如图所示,我们将变量x和y初始化为0,然后在线程1中执行:

x = 1, m = y;

同时在线程2中执行:

y = 1, n = x;

当两个线程都执行结束以后,m和n的值分别是多少呢?

对于已经工作了n年、写过无数次并发程序的的我们来说,这还不是小case吗?让我们来分析一下,大概有三种情况:

  • 如果程序先执行了x = 1, m = y代码段,后执行了y = 1, n = x代码段,那么结果是m = 0, n = 1;
  • 如果程序先执行了y = 1, n = x代码段,后执行了x = 1, m = y代码段,那么结果是m = 1, n = 0;
  • 如果程序的执行顺序先是 x = 1, y = 1, 后执行m = y, n = x, 那么结果是m = 1, n = 1;

所以(m, n)的组合一共有3种情况,分别是(0, 1), (1, 0)和(1, 1)。

阅读全文