Class: MonitorVariable

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

Instance Method Summary collapse

Constructor Details

#initialize(aMonitor) ⇒ MonitorVariable

Returns a new instance of MonitorVariable.



259
260
261
262
263
264
# File 'lib/buzzcore/extra/thread_utils.rb', line 259

def initialize(aMonitor)
  @monitor = aMonitor
  @cvRead = @monitor.new_cond
  @cvWrite = @monitor.new_cond
  @empty = true
end

Instance Method Details

#clearObject



299
300
301
302
303
304
305
# File 'lib/buzzcore/extra/thread_utils.rb', line 299

def clear
  @monitor.synchronize do 
    @value = nil
    @empty = true
    @cvWrite.signal
  end
end

#empty?Boolean

Returns:

  • (Boolean)


295
296
297
# File 'lib/buzzcore/extra/thread_utils.rb', line 295

def empty?
  @empty
end

#reject_valueObject



307
308
309
310
311
312
313
314
315
# File 'lib/buzzcore/extra/thread_utils.rb', line 307

def reject_value
  @monitor.synchronize do 
    if !empty?
      clear
    else
      @reject_next = true
    end
  end
end

#valueObject



266
267
268
269
270
271
272
273
274
275
276
277
# File 'lib/buzzcore/extra/thread_utils.rb', line 266

def value
  @monitor.synchronize do
    while empty?
      @cvRead.wait(@timeout)
    end
    result = @value
    @value = nil
    @empty = true
    @cvWrite.signal
    result
  end
end

#value=(aValue) ⇒ Object



279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
# File 'lib/buzzcore/extra/thread_utils.rb', line 279

def value=(aValue)
  @monitor.synchronize do 
    until empty?
      @cvWrite.wait(@timeout)
    end
    if @reject_next
      clear
    else
      @value = aValue
      @empty = false
      @cvRead.signal
    end
    aValue
  end
end