Czy moje rozumienie pamięci transakcyjnej opisane poniżej jest prawidłowe?
Próbuję zrozumieć TM. Przeczytałem tutaj odpowiedź Bena i próbowałem zrozumieć kilka innych artykułów w Internecie. Jednak nadal nie jestem do końca pewien, czy dobrze zrozumiałem. W moim rozumieniu w pamięci transakcyjnej wątki mogą wykonywać transakcje równolegle. Jeśli dwa (lub więcej) wątków spróbuje uzyskać dostęp do tej samej zmiennej transakcji, wszystkie wątki z wyjątkiem jednego przerwą transakcję i zaczną od nowa (w pewnym momencie, niekoniecznie natychmiast). Ten, który nie przerywa, aktualizuje zmienną transakcji.
Krótko mówiąc, w TM wszystkie wątki działają równolegle i mamy nadzieję, że nie będzie żadnego nakładania się dostępu do zmiennych transakcyjnych, a jeśli tak, po prostu pozwalamy tylko jednemu wątkowi kontynuować, podczas gdy inne wycofują się i ponawiają. Czy takie rozumienie TM jest prawidłowe?
Odpowiedzi
To całkiem niezłe streszczenie. Szczegóły są dość zawiłe i jest możliwe, że niektórych transakcji nie da się wyrazić w danym monitorze TM; co oznacza, że być może będziesz musiał uwzględnić dwie implementacje swojej transakcji - optymistyczną i pesymistyczną.
Pamięć podręczna to podstawowa implementacja; kiedy dokonujesz transakcyjnego odniesienia do pamięci, pamięć podręczna odnotowuje to i albo generuje alarm (restart), gdy którekolwiek z tych odniesień zostanie zmodyfikowane, albo odrzuca zamknięcie transakcji, jeśli któraś została zmodyfikowana.
Liczba zmiennych transakcyjnych może na ogół być niższa niż asocjatywność pamięci podręcznej; w przeciwnym razie wyrzucaliby się nawzajem z pamięci podręcznej, co skutkowałoby transakcją, która nigdy nie mogłaby się zakończyć.
To, jak działają przerwania w trakcie transakcji, pozostaje otwartym problemem.
Krótko mówiąc, 20 lat temu był to fascynujący pomysł. Ponieważ zbliża się do ogólnej użyteczności, wydaje się, że ma szybko rosnące wymagania sprzętowe. Może być bardziej przydatny do ocieplenia zimnych klimatów niż przyspieszanie systemów komputerowych.