Can compiler sometimes cache variable declared as volatile

Z tego co wiem kompilator nigdy nie optymalizuje zmiennej zadeklarowanej jakovolatile. Jednak mam taką tablicę.

volatile long array[8];

Różne wątki odczytują i zapisują je. Element tablicy jest modyfikowany tylko przez jeden z wątków i odczytywany przez dowolny inny wątek. Jednak w pewnych sytuacjach zauważyłem, że nawet jeśli zmodyfikuję element z wątku, wątek go odczytujący nie zauważy zmiany. Ciągle czyta tę samą starą wartość, jakby kompilator gdzieś ją buforował. Ale kompilator zasadniczo nie powinien buforować zmiennej lotnej, prawda? Więc dlaczego tak się dzieje.

UWAGA: Nie używamvolatile do synchronizacji wątków, więc przestań podawać mi odpowiedzi, takie jak użycie blokady lub zmiennej atomowej. Znam różnicę między zmiennymi lotnymi, atomowymi i muteksami. Zauważ również, że architektura to x86, która ma koherencję proaktywną. Również czytam zmienną wystarczająco długo po rzekomym zmodyfikowaniu przez inny wątek. Nawet po długim czasie wątek odczytujący nie widzi zmodyfikowanej wartości.

questionAnswers(9)

yourAnswerToTheQuestion