我现在正在研究并发,我有一些疑问。
让我们以wiki上的例子为例。 http://en.wikipedia.org/wiki/Atomic_(computer_science)
天真的、非原子方式读取一个值,加 1,然后写回。如果 2 个进程同时运行,则这些步骤可能会相互交错。例如,第一个进程读取并添加 1,但它被挂起。第二个进程读取,加 1 并写回并被中断。第一个进程恢复并写回旧值。
我了解原子比较和交换如何解决问题。它读取,加 1,并使用比较和交换来写入,如果比较和交换失败,则重试。
但是,我正在想象一个场景,我们有多个内核执行多个线程。如果第一个进程和第二个进程在不同的内核上同时运行会怎样?即 CPU1 上的 Process1 在 CPU2 上的 Process2 读取、添加、比较和交换的同时进行读取、添加、比较和交换。我认为比较和交换也会成功。
这种情况甚至可能吗?如果是这样,它是如何处理的?