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

В частности, большое внимание уделяется исследованиям в области простых в использовании и эффективных механизмов параллельного доступа к общим данным, одним из которых является Транзакционная Память. В данной статье пойдёт речь о чисто программной реализации системы транзакционной памяти – обеспечивающей такой доступ к разделяемыми данными при котором изменения данных в рамках транзакции либо становятся видимы другим потокам все сразу, либо (в случае конфликта с другими транзакциями) отменяются и транзакция перезапускается.

Система состоит из компилятора для языков С, С++, расширенных конструкциями ТП, и библиотеки времени исполнения. В статье основной упор сделан на языковые расширения и поддержку С++ – представленная система ТП едва ли не первая для этого языка поддерживающая классы C++, их наследование, виртуальные функции, шаблоны и обработку исключений.

Транзакционная память - удобное средство управления доступом к разделяемым данным, предоставляющее ряд преимуществ: возможность переиспользования транзакционного кода в рамках другого транзакционного кода, атомарность обработки ошибок и т.п. Платой за удобство служит производительность – использование ТП вносит накладные расходы и потому оптимизация производительности – важный аспект представленной работы.

Основным результатом является общедоступная, полнофункциональная система программной транзакционной памяти. Её использование позволит ускорить построение эффективных параллельных систем за счёт сочетания простой программной модели аналогичной неименованным критическим секциям с маштабируемостью, достижимой лишь при использовании индивидуальных блокировок для данных.