• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

smarr / SOMns
79%
master: 98%

Build:
Build:
LAST BUILD BRANCH: truffle-update
DEFAULT BRANCH: master
Repo Added 26 Apr 2016 12:37PM UTC
Files 55
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH threading/transactions
branch: threading/transactions
CHANGE BRANCH
x
Reset
  • threading/transactions
  • 070-release-prep
  • 1-gitlab-ci
  • 1-libgraal
  • activity-default-methods
  • actor-dym
  • actor-optimizations
  • and
  • artifact
  • async-demo
  • avoid-block-splitting
  • bd-inlining
  • bd-primitives
  • bitor-prim
  • blocking-prims-and-safepoints
  • chatapp-maintenance
  • chatapp-opt-experiments
  • check-isvalue-for-actor-creation
  • citation
  • cleanup
  • cleanup-dm-flags
  • cleanup-lexer
  • context-profile
  • coveralls
  • csp
  • csp-msg-breakpoints
  • csp-tests
  • da-ut-extract-benchmarks
  • da/TO-custom-bytebuffer
  • da/replay-opts
  • da/tracing-overhaul
  • debugger-tests
  • del-ns
  • dev
  • disable-noctxopt-for-debugging
  • docs
  • dym
  • error-instead-of-assertion
  • exit-handling
  • exit-on-error
  • exp/chatapp
  • extension-modules
  • far-ref-bug
  • fix-actor-debugger-tests
  • fix-bd-build-setup
  • fix-clobber
  • fix-flags-and-pinning
  • fix-incorrect-sync-on-lock
  • fix-lexer-avoid-reflection
  • fix-libgraal
  • fix-statement-tags
  • fix-travis-and-codespeed
  • fj-benchmark
  • fj-java
  • fork-join-clean-2
  • graal-usage
  • improve-behavior-on-halt-prim
  • in-parser-specialization
  • inlining-and-var-handling
  • java-coverage
  • jcstress
  • jdk10
  • kent-ci
  • kompos-demo-bench
  • kompos-fixes
  • kompos-tests
  • lee-vacation-benchmarks
  • ls-improvements
  • lsp-improvements
  • maintenance
  • master
  • message-stepping
  • modernize-travis-ci
  • moth/integrate-repos
  • move-to-bd
  • multi-paradigm-bench
  • mx
  • npm-test
  • ns-array-literals-final
  • ns-benchmarks
  • ns-compat
  • ns-file-names
  • ns-message-cascades
  • ns-numeric-literals
  • ns-object-literals-opt-determine-ctx-dynamically
  • object-model
  • object-model-race
  • opt-outer-sends-to-self
  • optimize-build
  • parser-array-dict
  • parser-messages
  • perf-changes
  • pinning
  • pr/make-instrumentation-of-prims-more-robust
  • pre-svm-gc
  • prepare-release
  • prim-constructors
  • primitive-cleanup
  • protocol-overview
  • rdb
  • reduce-compilation-threshold
  • reduce-noise
  • release
  • release-prep
  • remove-kompos-specific-protocol
  • remove-method-cats
  • remove-while-node
  • safepoint
  • safepoint-fix
  • savina-maintenance
  • self-in-locals
  • setter-sends
  • simplify-launcher
  • so-on-race
  • som-exp-for-module-not-found
  • string-and-file-compilation
  • super-instruction-detector
  • svm
  • svm-gc
  • swap-tracing-buffers-for-blocked-threads
  • termination
  • test-csp-breakpoints
  • test-inst-issue
  • tinyBenchmarks
  • travis-fold
  • truffle-boundaries-for-svm
  • truffle-update
  • ts-update
  • unify-scope
  • unlink-promise-data
  • update-ls
  • update-publication-list
  • update-truffle
  • update-truffle-0.25
  • update-truffle-wip
  • use-unified-graal-repo
  • user-friendly-errors
  • v0.1.0
  • v0.2.0
  • v0.4.0
  • v0.6.0
  • v0.7.0
  • various-fixes
  • warmup
  • while-true-cleanup

pending completion
1033

push

travis-ci

smarr
Implement a basic ‘toy’ STM

The general idea is that all accesses to objects and arrays are mediated via
`Change` objects. These keep a copy of the initial state, and a working copy on
which the transactions perform their accesses. On commit, we simply compare the
initial state with the publicly visible objects, if any change (conflict) is
seen the transaction retries. If no conflict was determined, the new state is
copied into the publicly visible object.

Transactions always succeed, this implementation automatically retries.

The initial creation of a `Change` object accesses the public object while
holding its lock. Similarly, on writing back changes, the lock is acquired.
Transaction commits are globally sequentialized on a single lock.

Method and blocks executed inside a transaction execute an `atomic` variant of
their method body. All invocable used in the transactional context, i.e.,
within a `atomic: [...]` execution are split from the normal methods, and
marked as `isAtomic`. This flag allows to insert the necessary nodes to ensure
that a transaction works on working copies private to the transaction.

To avoid issues with class identity, the slots storing lazily allocated class
objects are ignored when comparing and updating objects.

Inspired by: Transactional Memory for Smalltalk
L. Renggli, and O. Nierstrasz. In Proc. of ICDL, 2007.
DOI: 10.1145/1352678.1352692

Signed-off-by: Stefan Marr <git@stefan-marr.de>

4146 of 5229 relevant lines covered (79.29%)

1789.44 hits per line

Relevant lines Covered
Build:
Build:
5229 RELEVANT LINES 4146 COVERED LINES
1789.44 HITS PER LINE
Source Files on threading/transactions
  • List 0
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
1033 threading/transactions Implement a basic ‘toy’ STM The general idea is that all accesses to objects and arrays are mediated via `Change` objects. These keep a copy of the initial state, and a working copy on which the transactions perform their accesses. On commit, we ... push 19 Jan 2017 03:44PM UTC smarr travis-ci pending completion  
See All Builds (1057)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc