linux c多线程编程之全局变量访问操作

参考文章1:https://blog.csdn.net/chz_1/article/details/87927041

假设现在有线程A和线程B,还有全局变量i,寄存器X
1、线程对全局变量的访问时分三步走的 :
(1)取全局变量i到某个寄存器X
(2)对寄存器进行操作,即操作i的值
(3)操作完之后将寄存器X的值存到i

2、多线程实际上是由时间片选来轮换进行的。当线程A执行到某个地方还没结束的时候,可能就会轮换到线程B来执行。

3、总和上述两点,当线程A访问变量i的时候,可能只到了第(2)小步,就轮换到线程B了。
举个例子:
线程A :

int i = 1;

i++

线程B:

--i
执行过程顺序如下:


最终的结果可能是0或者1或者2。

小结:如果多线程里面的共享变量(整型变量、链表等等)是需要都进行运算且被重新赋值的,一定要加线程锁,保证执行顺序。加了锁,保证一个线程的该部分访问完再访问其他线程的,这就叫原子性。需要靠加锁来保证原子性操作。那么,如果变量的运算只在一个线程里面,其他线程只是取这些值做判断而且是循环性质的判断,那可以不用加。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值