前言
硬件和软件的发展都是相互的,硬件的发展,多核CPU,缓存,进程,线程,我们享受CPU带来的高性能的同时,必定同时也伴随着风险。为了解决这些,则出现了一些理论和实践
问题
问题一 缓存导致的可见性问题
可见性:一个线程对共享变量的修改,另外一个线程能够立刻看到,我们称为可见性。
单核时代:所有的线程都是在一颗 CPU 上执行,CPU 缓存与内存的数据一致性容易解决。因为所有线程都是操作同一个 CPU 的缓存,一个线程对缓存的写,对另外一个线程来说一定是可见的。
多核时代:每颗 CPU 都有自己的缓存,这时 CPU 缓存与内存的数据一致性就没那么容易解决了,当多个线程在不同的 CPU 上执行时,这些线程操作的是不同的 CPU 缓存。
如下图 多核的变量的变更两个线程之间时不可见的,都是独立的缓存。

问题二 线程切换带来的原子性问题
原子性:我们把一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性。
线程切换:指的是操作系统在多任务环境下,由于需要让不同的线程轮流执行,而对当前正在运行的线程进行暂停,并切换到另一个线程上运行的过程。在多线程环境中,操作系统会通过调度算法来决定哪个线程可以运行,并在必要时进行线程切换,以实现多个线程并发执行的目的。
线程切换通常涉及以下几个步骤:

最低0.47元/天 解锁文章
5623

被折叠的 条评论
为什么被折叠?



