Re[8]: Software transactional memory
От: palm mute  
Дата: 11.01.07 15:58
Оценка:
Здравствуйте, Cyberax, Вы писали:

>> Если будет время, опиши, пожалуйста, задачу, а не реализацию. Хорошо бы

>> в таком виде, чтобы решение можно было набросать за пару часов. Самому
>> интересно, решается ли она с помощью хаскелловской реализации STM.
C>Задача простая:
C>1) Дан обычный линейный однонаправленый список.
C>2) Необходимо придумать механизм транзакций, чтобы можно было поменять
C>элемент из середины списка, не влияя на клиентов вне транзакции.
C>3) Этот механизм не должен приводить к копированию списка.

По моему скромному имху, "дан линейный однонаправленный список ..." — это не задача. Задача — это, например, перевести деньги со счета на счет.

Теперь по сути вопроса. Если дан список неизменяемых значений (целых чисел, например) — то задача некорректно поставлена, т.к. и без транзакций нельзя поменять элемент в середине списка, не скопировав элементы, ему предшествующие. Т.е., если в терминах хаскелловской реализации мы работаем с переменной типа TVar [Int] (по сути, это одна транзакционная ячейка, содержащая весь список), каждая транзакция будет вызывать копирование всего списка; правда, смысла в таких транзакциях немного. А вот если мы работаем со списком ячеек транзакционной памяти — [TVar Int] — изменение одной из ячеек в списке копирования других элементов не вызовет. Механизм придумывать не надо — он уже придуман и реализован, я уже приводил здесь ссылку на статью.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.