Class: Concurrent::Event
- Inherits:
-
Synchronization::LockableObject
- Object
- Synchronization::LockableObject
- Concurrent::Event
- Defined in:
- lib/concurrent/atomic/event.rb
Overview
Old school kernel-style event reminiscent of Win32 programming in C++.
When an Event
is created it is in the unset
state. Threads can choose to
#wait
on the event, blocking until released by another thread. When one
thread wants to alert all blocking threads it calls the #set
method which
will then wake up all listeners. Once an Event
has been set it remains set.
New threads calling #wait
will return immediately. An Event
may be
#reset
at any time once it has been set.
Instance Method Summary (collapse)
-
- (Event) initialize
constructor
Creates a new
Event
in the unset state. -
- (Boolean) reset
Reset a previously set event back to the
unset
state. -
- (Boolean) set
Trigger the event, setting the state to
set
and releasing all threads waiting on the event. -
- (Boolean) set?
Is the object in the set state?.
- - (Boolean) try?
-
- (Boolean) wait(timeout = nil)
Wait a given number of seconds for the
Event
to be set by another thread.
Constructor Details
- (Event) initialize
Creates a new Event
in the unset state. Threads calling #wait
on the
Event
will block.
40 41 42 43 |
# File 'lib/concurrent/atomic/event.rb', line 40 def initialize super synchronize { ns_initialize } end |
Instance Method Details
- (Boolean) reset
Reset a previously set event back to the unset
state.
Has no effect if the Event
has not yet been set.
68 69 70 71 72 73 74 75 76 |
# File 'lib/concurrent/atomic/event.rb', line 68 def reset synchronize do if @set @set = false @iteration +=1 end true end end |
- (Boolean) set
Trigger the event, setting the state to set
and releasing all threads
waiting on the event. Has no effect if the Event
has already been set.
56 57 58 |
# File 'lib/concurrent/atomic/event.rb', line 56 def set synchronize { ns_set } end |
- (Boolean) set?
Is the object in the set state?
48 49 50 |
# File 'lib/concurrent/atomic/event.rb', line 48 def set? synchronize { @set } end |
- (Boolean) try?
60 61 62 |
# File 'lib/concurrent/atomic/event.rb', line 60 def try? synchronize { @set ? false : ns_set } end |
- (Boolean) wait(timeout = nil)
Wait a given number of seconds for the Event
to be set by another
thread. Will wait forever when no timeout
value is given. Returns
immediately if the Event
has already been set.
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/concurrent/atomic/event.rb', line 83 def wait(timeout = nil) synchronize do unless @set iteration = @iteration ns_wait_until(timeout) { iteration < @iteration || @set } else true end end end |