Предположим, у меня есть следующий код:
int x[200];
void thread1() {
for(int i = 0; i < 100; i++)
x[i*2] = 1;
}
void thread2() {
for(int i = 0; i < 100; i++)
x[i*2 + 1] = 1;
}
Корректен ли код в модели памяти x86-64 (насколько я понимаю), если на странице была настроена политика кэширования записи по умолчанию в Linux? Как влияет на производительность такой код (насколько я понимаю - нет)?
PS. Что касается производительности - меня больше всего интересует Sandy Bridge.
РЕДАКТИРОВАТЬ: Как и ожидалось - я хочу писать в выровненные места из разных потоков. Я ожидаю, что верхний код после финиша и барьера будет содержать {1,1,1, ...}
в x
вместо {0,1,0,1,...}
или {1,0,1,0,...}
.