Pochodzę w dużej mierze z tła C++, ale myślę, że to pytanie dotyczy wątków w dowolnym języku. Oto scenariusz:W jaki sposób systemy gwintowane radzą sobie z udostępnianiem danych w pamięci podręcznej przez inne cpus?
Mamy dwa wątki (ThreadA i ThreadB), a wartość x w pamięci współdzielonej
Załóżmy, że dostęp do x jest odpowiednio kontrolowana przez mutex (lub innej odpowiedniej kontroli synchronizacji)
Jeśli wątki działają na różnych procesorach, co się stanie, jeśli ThreadA wykona operację zapisu, ale procesor umieści wynik w pamięci podręcznej L2 zamiast w pamięci głównej? Następnie, jeśli ThreadB spróbuje odczytać wartość, czy nie będzie tylko wyglądał w swojej własnej pamięci podręcznej L1/L2/pamięci głównej, a następnie będzie pracował ze starą wartością?
Jeśli tak nie jest, to w jaki sposób zarządza się tym problemem?
Jeśli tak, to co można z tym zrobić?
Dziękuję bardzo za tę odpowiedź. Zastanawiałem się, czy w grę wchodzi tu jakiś sprzętowy mechanizm poziomu, ponieważ wydawało się, że istnieją praktyczne granice tego, co można osiągnąć na poziomie języka/kompilatora. – csj