Когда вы планируете один поток для разных процессоров, нужно ли каждый раз очищать кеш? Если кеш не очищается, не может ли произойти следующее:
Предположим, у вас есть следующий (псевдо) код, выполняемый двумя процессорами, P1 и P2.
1. foo() {
2. int x=5;
3. x=10;
4. print x;
5. }
Первоначально поток запланирован на P1, который выполняет строки 1 и 2 и сохраняет 5 в своем кеше для ячейки памяти x (в стеке).
Затем поток планируется на P2, который выполняет строку 3 и сохраняет 10 в своем кеше для ячейки памяти x.
Наконец, поток снова назначается на P1, и выполнение строки 4 выводит 5 (значение x в кэше P1).
Тем не менее, мы явно ожидаем, что будет напечатано 10.