# This Team implements a simple mutex-lock.
# The method do_locked will lock, execute and unlock the method. During
# the method call no other invocation is valid, while the lock is active.
class Lockable < Team
class Lock
#indicates, if the lock is active.
attr :locked
# ctor.
def initialize
@locked = false
end
# Activate the lock.
def lock
raise "already locked" if @locked
@locked = true
puts "[lock access... ]\n"
end
# Deactivate the lock.
def unlock
raise if not @locked
@locked = false
puts "[unlock access...]\n"
end
# Callin for methods to become a locked method.
def do_locked
lock()
base()
ensure
unlock()
end
# Callin for methods to become a safe locked method.
# This Team gets suspended for the time of the basecall.
def do_safelocked
lock()
#Here is the magic: during the base call this team gets suspended
get_connector().suspend
base()
ensure
get_connector().resume
#At this point the team is active again.
unlock
end
end
end
syntax highlighted by Code2HTML, v. 0.9.1