Many programming languages, such as Clojure, Scala, and Haskell, support different concurrency models. In practice these models are often combined, however the semantics of the combinations are not always well-defined. In this paper, we study the combination of futures and Software Transactional Memory. Currently, futures created within a transaction cannot access the transactional state safely, violating the serializability of the transactions and leading to undesired behavior. We define transactional tasks: a construct that allows futures to be created in transactions. Transactional tasks allow the parallelism in a transaction to be exploited, while providing safe access to the state of their encapsulating transaction. We show that transactional tasks have several useful properties: they are coordinated, they maintain serializability, and they do not introduce non-determinism. As such, transactional tasks combine futures and Software Transactional Memory, allowing the potential parallelism of a program to be fully exploited, while preserving the properties of the separate models where possible.
@InProceedings{swalens_et_al:LIPIcs.ECOOP.2016.23, author = {Swalens, Janwillem and De Koster, Joeri and De Meuter, Wolfgang}, title = {{Transactional Tasks: Parallelism in Software Transactions}}, booktitle = {30th European Conference on Object-Oriented Programming (ECOOP 2016)}, pages = {23:1--23:28}, series = {Leibniz International Proceedings in Informatics (LIPIcs)}, ISBN = {978-3-95977-014-9}, ISSN = {1868-8969}, year = {2016}, volume = {56}, editor = {Krishnamurthi, Shriram and Lerner, Benjamin S.}, publisher = {Schloss Dagstuhl -- Leibniz-Zentrum f{\"u}r Informatik}, address = {Dagstuhl, Germany}, URL = {https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2016.23}, URN = {urn:nbn:de:0030-drops-61173}, doi = {10.4230/LIPIcs.ECOOP.2016.23}, annote = {Keywords: Concurrency, Parallelism, Futures, Threads, Fork/Join, Software Transactional Memory} }
Feedback for Dagstuhl Publishing