当您跨不同处理器调度单个线程时,是否每次都必须清除缓存?如果不清除缓存,则不会发生以下情况:
假设您有以下(伪)代码由 2 个处理器 P1 和 P2 执行。
1. foo() {
2. int x=5;
3. x=10;
4. print x;
5. }
最初,线程被调度在 P1 上,它执行第 1 行和第 2 行,并将 5 存储在其缓存中以用于 x 的内存位置(在堆栈上)。
然后线程被调度到执行第 3 行的 P2 上,并将 10 存储在其缓存中以用于 x 的内存位置。
最后,线程再次被调度在 P1 上,并执行第 4 行,打印 5(x 在 P1 的缓存中的值)。
然而,我们显然希望打印 10 个。