wymagania dostosowania dla atomowych instrukcji x86

Microsoft oferujeInterlockedCompareExchange funkcja do wykonywania atomowych operacji porównania i zamiany. Jest też_InterlockedCompareExchange wewnętrzny.

Na x86 są one implementowane za pomocącmpxchg instrukcja.

Jednakże, czytając dokumentację dotyczącą tych trzech podejść, wydaje się, że nie zgadzają się z wymaganiami dostosowania.

Intelinstrukcja obsługi nie mówi nic o wyrównaniu (poza tymJeśli sprawdzanie wyrównania jest włączone i tworzone jest nieprzypisane odwołanie do pamięci, generowany jest wyjątek)

Sprawdziłem równieżlock prefiks, który wyraźnie to stwierdza

Integralność prefiksu LOCK tonie wpływ wyrównania pola pamięci.

(podkreślenie moje)

Tak więc Intel wydaje się twierdzić, że wyrównanie jest nieistotne. Operacja będzie atomowa bez względu na wszystko.

The_InterlockedCompareExchange wewnętrzna dokumentacja również nie mówi nic o wyrównaniu, jednakInterlockedCompareExchange funkcjonować stwierdza, że

Parametry tej funkcji muszą być wyrównane na granicy 32-bitowej; w przeciwnym razie funkcja będzie zachowywać się nieprzewidywalnie w wieloprocesorowych systemach x86 i systemach innych niż x86.

Więc co daje? Czy wymagania dotyczące wyrównania są dlaInterlockedCompareExchange aby upewnić się, że funkcja będzie działać nawet na procesorach sprzed 486, gdziecmpxchg instrukcja nie jest dostępna? To wydaje się prawdopodobne na podstawie powyższych informacji, ale chciałbym być pewien, zanim na tym polegam. :)

Albo czy dostosowanie wymagane przez ISA gwarantuje atomowość, a ja szukam niewłaściwych miejsc w podręcznikach Intela?

questionAnswers(4)

yourAnswerToTheQuestion