Class: MultiThreadVariable

Inherits:
Object
  • Object
show all
Defined in:
lib/buzzcore/extra/thread_utils.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(aReadTimeout = nil, aWriteTimeout = nil) ⇒ MultiThreadVariable

Returns a new instance of MultiThreadVariable.



197
198
199
200
201
# File 'lib/buzzcore/extra/thread_utils.rb', line 197

def initialize(aReadTimeout=nil,aWriteTimeout=nil)
	@q = SizedQueue.new(1)
	@read_timeout = aReadTimeout
	@write_timeout = aWriteTimeout
end

Instance Attribute Details

#read_timeoutObject

Returns the value of attribute read_timeout.



195
196
197
# File 'lib/buzzcore/extra/thread_utils.rb', line 195

def read_timeout
  @read_timeout
end

#write_timeoutObject

Returns the value of attribute write_timeout.



195
196
197
# File 'lib/buzzcore/extra/thread_utils.rb', line 195

def write_timeout
  @write_timeout
end

Instance Method Details

#clearObject



203
204
205
# File 'lib/buzzcore/extra/thread_utils.rb', line 203

def clear
	@q.clear
end

#empty?Boolean

Returns:

  • (Boolean)


207
208
209
# File 'lib/buzzcore/extra/thread_utils.rb', line 207

def empty?
	@q.empty?
end

#inner_value_set(aValue) ⇒ Object



221
222
223
224
225
226
227
228
229
# File 'lib/buzzcore/extra/thread_utils.rb', line 221

def inner_value_set(aValue)
	Thread.exclusive do
		if @reject_next
			clear
		else
			@q.push(aValue)
		end
	end
end

#reject_valueObject



244
245
246
247
248
249
250
251
252
# File 'lib/buzzcore/extra/thread_utils.rb', line 244

def reject_value
	Thread.exclusive do
		if !empty?
			clear
		else
			@reject_next = true
		end
	end
end

#unblockObject



240
241
242
# File 'lib/buzzcore/extra/thread_utils.rb', line 240

def unblock()
	@q.unblock()
end

#valueObject



211
212
213
214
215
216
217
218
219
# File 'lib/buzzcore/extra/thread_utils.rb', line 211

def value
	if @read_timeout
		Timeout.timeout(@read_timeout) do
			@q.pop
		end
	else
		@q.pop
	end
end

#value=(aValue) ⇒ Object



231
232
233
234
235
236
237
238
# File 'lib/buzzcore/extra/thread_utils.rb', line 231

def value=(aValue)
	if @write_timeout
		Timeout.timeout(@write_timeout) { inner_value_set(aValue) }
	else
		inner_value_set(aValue)
	end
	aValue
end