[править: в вопросе упоминается только Concurrent Haskell, но упоминается, что, как я полагаю, упоминаются «Операции с составной памятью», статья, в которой впервые был описан Haskell STM.Пожалуйста, поправьте меня, если я ошибаюсь.]
STM теперь отлично работает на нескольких ядрах.Параллельная реализация была впервые представлена в GHC 6.6 и использует детальную стратегию двухфазной блокировки;то есть, чтобы зафиксировать транзакцию, реализация сначала пытается заблокировать каждую переменную, участвующую в транзакции, затем фиксирует изменения и, наконец, разблокирует все переменные.Получение блокировки не блокирует: если блокировка уже удерживается, транзакция прерывается и повторяется (это позволяет избежать обычного взаимоблокировки отмены порядка блокировки, который мог бы применяться, если блокировка была заблокирована).
Эта реализация STMконечно, не самый быстрый - в литературе описано много альтернативных методов, которые могли бы привести к лучшей производительности, но реализация GHC относительно проста и не предполагает каких-либо глобальных блокировок (транзакции, работающие с различными наборами переменных, могут выполняться параллельно без помех).