Skip to content

Instantly share code, notes, and snippets.

@fipar
Created March 20, 2013 16:50
Show Gist options
  • Save fipar/5206269 to your computer and use it in GitHub Desktop.
Save fipar/5206269 to your computer and use it in GitHub Desktop.
Minimal example of raw Clojure's STM use from JRuby
require "java"
require "clojure.jar"
java_import "clojure.lang.LockingTransaction"
java_import "clojure.lang.Ref"
counter = Ref.new(0)
puts "Initial value : #{counter.deref}"
Thread.new {LockingTransaction.run_in_transaction(Proc.new {counter.set counter.deref + 10})}
Thread.new {LockingTransaction.run_in_transaction(Proc.new {sleep 0.5; counter.set counter.deref + 15})}
Thread.new {LockingTransaction.run_in_transaction(Proc.new {sleep 0.1; counter.set counter.deref + 10})}
sleep 2
puts "Final value : #{counter.deref}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment