В терминах реальных низкоуровневых атомных инструкций и заборов памяти (я предполагаю, что они используются), как вы реализуете STM?
Часть, которая таинственна для меня, заключается в том, что с учетом некоторого произвольного фрагмента кода вам нужен способ вернуться назад и определить, были ли значения, используемые на каждом шаге, действительными. Как вы это делаете и как вы делаете это эффективно? Это также показало бы, что, как и любое другое "блокирующее" решение, вы хотите, чтобы ваши критические разделы были как можно меньше (чтобы уменьшить вероятность конфликта), я прав?
Кроме того, STM может просто обнаружить "другой поток, введенный в эту область во время выполнения вычисления, поэтому вычисление недействительно" или может ли оно фактически определить, были ли использованы сбитые значения (и, следовательно, по удачи иногда два потока могут выполнять один и тот же критический раздел без необходимости отката)?