Sha256: 91900b7ede6bf01537286b7eebfccda2ddf3a469ab98507b5480eb8782f8f745

Contents?: true

Size: 1.17 KB

Versions: 2

Compression:

Stored size: 1.17 KB

Contents

# code:
# * George Moschovitis  <gm@navel.gr>
#
# (c) 2002-2003 Navel, all rights reserved.
# $Id: array.rb 101 2004-10-22 12:35:39Z gmosx $

require "sync"

module N

# == SafeArray
#
# A thread-safe array. We use a sync object instead of a mutex,
# because it is re-entrant.
# An exclusive lock is needed when writing, a shared lock IS NEEDED
# when reading
#
class SafeArray < Array
	
	attr :sync

	# gmosx: delegator is not used.
	#
	def initialize(delegator = nil)
		@sync = ::Sync.new()
	end

	def << (value)
		return @sync.synchronize(::Sync::SH) {
			super
		}		
	end
	
	def delete_if(&block) 
		return @sync.synchronize(::Sync::SH) {
			super
		}				
	end
	
	def [](key)
		return @sync.synchronize(::Sync::SH) {
			super
		}
	end

	def []=(key, value)
		return @sync.synchronize(::Sync::EX) {
			super
		}
	end

	def delete(key)
		return @sync.synchronize(::Sync::EX) {
			super
		}
	end

	def clear
		@sync.synchronize(::Sync::EX) {
			super
		}
	end

	def size
		return @sync.synchronize(::Sync::SH) {
			super
		}
	end

	def shift
		return @sync.synchronize(::Sync::EX) {
			super
		}
	end

	def unshift(el)
		return @sync.synchronize(::Sync::EX) {
			super
		}
	end
		
end

end # module

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nitro-0.2.0 lib/n/utils/array.rb
nitro-0.3.0 lib/n/utils/array.rb