2012-03-08 5 views
0

Я понимаю, почему необходимы барьеры памяти, но я не понимаю его в случае Uniprocessor.Является ли барьер памяти значимым только в SMP?

Должен ли я иметь дело с барьерами, даже когда я использую UP? Каждый документ объясняет их SMP, но не UP.

В следующем коде есть ли вероятность, что r2 == 0 в точке a?

// the location 0xdeadbeef has a zero initial value 
ldr r0, =0xdeadbeef 
ldr r1, =0xdeadbeef 
ldr r2, =1 
str r2, [r0] 
ldr r2, [r1] 
// point a 
+0

Может быть актуальным для суперскалярных неподходящих процессоров. Это действительно должно быть указано моделью памяти и набором команд процессора. (зло в деталях). –

+0

@Basile: Я так не думаю - правило железа - выполнение одного потока на одном процессоре всегда имеет следствием следующую причину. –

ответ

2

Есть барьеры памяти и компилятора барьеры.

На одном процессоре не требуются барьеры памяти (я не уверен, что hyperthreading считается как несколько процессоров), но барьеры компилятора - компилятор может переупорядочить код в разных потоках таким образом, что вы терпите неудачу.

0

Памятные барьеры должны использоваться только для «глобальных переменных». Поскольку локальные (в стеке) и регистры автоматически сохраняются при переключении потоков.

Может быть универсальность лучше, чем предположение, что вы всегда иметь дело с UP