Class: FiberMon::RBFiberMon::ConditionVariable

Inherits:
Object
  • Object
show all
Defined in:
lib/fiber-mon.rb

Instance Method Summary collapse

Constructor Details

#initialize(monitor) ⇒ ConditionVariable

Returns a new instance of ConditionVariable.



201
202
203
204
205
206
# File 'lib/fiber-mon.rb', line 201

def initialize(monitor)
	@mon = monitor

	@waitings = []
	@waitings_mx = Mutex.new
end

Instance Method Details

#broadcast(&block) ⇒ Object



224
225
226
227
228
229
230
231
232
233
234
# File 'lib/fiber-mon.rb', line 224

def broadcast(&block)
	@waitings_mx.synchronize do
	  if block_given?
	    yield
	  end

	  return if @waitings.empty?
	  fbs, @waitings = @waitings, []
	  @mon.entry_wait_resume(*fbs)
	end
end

#signal(&block) ⇒ Object



212
213
214
215
216
217
218
219
220
221
222
# File 'lib/fiber-mon.rb', line 212

def signal(&block)
	@waitings_mx.synchronize do
	  if block_given?
	    yield
	  end

	  if fb =  @waitings.shift
	    @mon.entry_wait_resume(fb)
	  end
	end
end

#synchronize(&block) ⇒ Object



208
209
210
# File 'lib/fiber-mon.rb', line 208

def synchronize(&block)
	@waitings_mx.synchronize(&block)
end

#waitObject



236
237
238
239
240
241
# File 'lib/fiber-mon.rb', line 236

def wait
	@waitings_mx.synchronize do
	  @waitings.push @mon.current
	end
	@mon.fiber_yield
end

#wait_until(&cond) ⇒ Object



243
244
245
246
247
# File 'lib/fiber-mon.rb', line 243

def wait_until(&cond)
	until cond.call
	  wait
	end 
end

#wait_while(&cond) ⇒ Object



249
250
251
252
253
# File 'lib/fiber-mon.rb', line 249

def wait_while(&cond)
	while cond.call
	  wait
	end 
end