线程交互问题

线程交互中的问题主要涉及竞态条件、数据竞争和缓存变量。竞态条件发生在计算正确性依赖于线程执行顺序时,如check-then-act和read-modify-write操作。数据竞争是多线程并发访问同一内存区域并至少有一个线程进行写操作的情况,导致访问顺序不确定。缓存变量为优化性能而存在,但可能导致线程间的不一致,因为每个线程可能拥有变量的本地拷贝。
摘要由CSDN通过智能技术生成

线程中的问题

  线程交互是通过共享变量完成的,当线程之间没有交互时,开发多线程的应用程序就会变得简单很多。一旦发生了交互,很多诱发线程不安全(在多线程环境下不正确)的因素就会暴露出来。这些bug多和竞态条件、数据竞争、缓存变量有关。

1. 竞态条件

当计算的正确性取决于相对时间或者调度器所控制的多线程交叉时。就会发生竞态条件。
有以下两种类型的竞态条件。

  • check-then-act
    以下例子的“检查”是if (a == 10),“动作”是 b = a / 2
if (a == 10) {
   
	b = a / 2;
}

如果a和b都是局部变量自然多线程时是没有问题的。但是假设a和b是实例变量或者类静态变量。就会可能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值