【并发编程实战】并发的编程引发的三个问题--可见性/原子性/顺序性

前言

    硬件和软件的发展都是相互的,硬件的发展,多核CPU,缓存,进程,线程,我们享受CPU带来的高性能的同时,必定同时也伴随着风险。为了解决这些,则出现了一些理论和实践

问题

问题一  缓存导致的可见性问题

   可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性。

   单核时代:所有的线程都是在一颗 CPU 上执行,CPU 缓存与内存的数据一致性容易解决。因为所有线程都是操作同一个 CPU 的缓存,一个线程对缓存的写,对另外一个线程来说一定是可见的。

    多核时代:每颗 CPU 都有自己的缓存,这时 CPU 缓存与内存的数据一致性就没那么容易解决了,当多个线程在不同的 CPU 上执行时,这些线程操作的是不同的 CPU 缓存。

    如下图  多核的变量的变更两个线程之间时不可见的,都是独立的缓存。

      

问题二  线程切换带来的原子性问题

原子性:我们把一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性。

 线程切换:指的是操作系统在多任务环境下,由于需要让不同的线程轮流执行,而对当前正在运行的线程进行暂停,并切换到另一个线程上运行的过程。在多线程环境中,操作系统会通过调度算法来决定哪个线程可以运行,并在必要时进行线程切换,以实现多个线程并发执行的目的。

线程切换通常涉及以下几个步骤:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上善若水-学者至上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值