Child pages
  • Hardware transactional memory in Java
Skip to end of metadata
Go to start of metadata

Транзакционная память - круто, модно, молодежно, но нельзя в Java. Так давайте сделаем, чтобы было можно!


На текущий момент транзакционная память может использоваться при коротком synchronized блоке, так называемый  lock elision. Но ведь хочется делать так:

val success = atomic(() -> {
    x = 2;
    y = 3;
})

И чтобы этот код был выполнен атомарно и, по возможности, с использованием транзакционной памяти. В чем и цель, собственно. А для этого нужно написать дефолтную версию метода atomic и интринсик в openjdk.

В openjdk патч получается совсем небольшим, его реально пролоббировать. А для поддержки в Java, с приходом модулей в Java 9 появились модули-инкубаторы (http://openjdk.java.net/jeps/11), которые можно попытаться использовать.

 

Инструкция по сборке OpenJDK:
https://habrahabr.ru/post/319078/ - для винды
На маках вроде все должно быть проще.

Инфа про intrinsics:

https://www.youtube.com/watch?v=Ku4CMKcPbh0

https://www.slideshare.net/RednaxelaFX/green-teajug-hotspotintrinsics02232013

http://mail.openjdk.java.net/pipermail/hotspot-dev/2014-November/015922.html

 

HTM

http://neerc.ifmo.ru/sptcc/courses.html#herlihy - лекция Herlihy с SPTCC'17

 

STM:

https://github.com/pveentjer/Multiverse

  • No labels