Class MonitorMixin::ConditionVariable
In: monitor.rb
Parent: Object

FIXME: This isn’t documented in Nutshell.

Since MonitorMixin.new_cond returns a ConditionVariable, and the example above calls while_wait and signal, this class should be documented.

Methods

Classes and Modules

Class MonitorMixin::ConditionVariable::Timeout

Public Class methods

[Source]

     # File monitor.rb, line 153
153:     def initialize(monitor)
154:       @monitor = monitor
155:       @waiters = []
156:     end

Public Instance methods

[Source]

     # File monitor.rb, line 136
136:     def broadcast
137:       @monitor.instance_eval {mon_check_owner()}
138:       Thread.critical = true
139:       for t in @waiters
140:         t.wakeup
141:       end
142:       @waiters.clear
143:       Thread.critical = false
144:       Thread.pass
145:     end

[Source]

     # File monitor.rb, line 147
147:     def count_waiters
148:       return @waiters.length
149:     end

[Source]

     # File monitor.rb, line 127
127:     def signal
128:       @monitor.instance_eval {mon_check_owner()}
129:       Thread.critical = true
130:       t = @waiters.shift
131:       t.wakeup if t
132:       Thread.critical = false
133:       Thread.pass
134:     end

[Source]

     # File monitor.rb, line 89
 89:     def wait(timeout = nil)
 90:       @monitor.instance_eval {mon_check_owner()}
 91:       timer = create_timer(timeout)
 92:       
 93:       Thread.critical = true
 94:       count = @monitor.instance_eval {mon_exit_for_cond()}
 95:       @waiters.push(Thread.current)
 96: 
 97:       begin
 98:         Thread.stop
 99:         return true
100:       rescue Timeout
101:         return false
102:       ensure
103:         Thread.critical = true
104:         if timer && timer.alive?
105:           Thread.kill(timer)
106:         end
107:         if @waiters.include?(Thread.current)  # interrupted?
108:           @waiters.delete(Thread.current)
109:         end
110:         @monitor.instance_eval {mon_enter_for_cond(count)}
111:         Thread.critical = false
112:       end
113:     end

[Source]

     # File monitor.rb, line 121
121:     def wait_until
122:       until yield
123:         wait
124:       end
125:     end

[Source]

     # File monitor.rb, line 115
115:     def wait_while
116:       while yield
117:         wait
118:       end
119:     end

Search

Google

Ruby API Docs

Links