Linux C高阶(11) 多线程变量自增问题分析

312 篇文章 58 订阅 ¥99.00 ¥39.90
21 篇文章 0 订阅 ¥99.00 ¥19.90

考虑变量i++的操作,实际上可以分解为以下3步:

(1)从内存单元读入寄存器;

(2)在寄存器中对变量做增量操作;

(3)把新的值写回内存单元。

如果两个线程试图几乎在同一时间对同一变量做增量操作而不进行同步的话,结果可能就不一致了,在上述代码中,我们传进线程函数的是变量的地址,那么变量i自增后,可能还没有写回内存单元,就被另一个线程读取了。

好了,我们现在提出一个问题,假设一个全局变量a = 0,创建了两个线程对其执行a++操作,
那么a等于多少?
a的值是不确定的,可能是1,也可能是2。

如果从汇编的角度来理解,这个问题非常简单。突然如果你懂汇编,你会获得很多额外乐趣,我们来写一个简单的测试程序。
main.c:

#include <pthread.h>
int a = 0;
void 
  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值