Транзакционная память

         

Системы с откладываемыми изменениями.


В других системах STM с откладываемыми изменениями применяются альтернативные реализационные методы. В системе Харриса (Tim Harris) и Фрейзера (Keir Fraser) WSTM конфликты обнаруживаются на уровне слов, а не объектов. Такой подход может позволить избежать излишних конфликтов, если две транзакции обращаются к разным полям некоторого объекта, но эта идея настолько усложняет реализацию, что была применена лишь в нескольких системах STM (хотя в системах HTM принято выявлять конфликты на уровне слов или блоков кэша). WTSM также была первой системой STM, интегрированной в язык программирования. Харрис и Фрейзер расширили язык Java атомарным оператором, который выполняет свой блок внутри транзакции, например:

atomic { int x = lst.head; lst = lst.tail; … }

В этой конструкции можно также использовать предохранитель, не позволяющий выполняться транзакции, пока не выполнится указанное условие.

Существенное внимание уделялось исследованию политик выбора транзакции, которую следует аварийно завершить в случае конфликтов [10, 28]. Ни одна политика не обеспечивает наилучшее поведение во всех случаях, однако в целом неплохо работает политика «полька» (polka). При применении этой политики для каждой транзакции запоминается число открытых ей объектов, и этот счетчик используется в качестве ее приоритета. Если какая-то транзакция пытается запросить доступ к некоторому объекту, то это приводит к немедленному аварийному завершению конфликтующей транзакции с более низким приоритетом. Если приоритет у транзакции, запрашивающей доступ, оказывается ниже, чем у конфликтующей с ней транзакции, то она откатывается N раз, где N равно разнице в приоритетах, с экспоненциально возрастающим временным интервалом между попытками. Другими словами, такой транзакции дается N попыток получить доступ к требуемому объекту, и после каждой неудачной попытки она откатывается и выполняется заново.



Содержание раздела