Class: MultiThreadVariable

Inherits:
Object
  • Object
show all
Defined in:
lib/buzzcore/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/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/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/thread_utils.rb', line 195

def write_timeout
  @write_timeout
end

Instance Method Details

#clearObject



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

def clear
  @q.clear
end

#empty?Boolean

Returns:

  • (Boolean)


207
208
209
# File 'lib/buzzcore/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/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/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/thread_utils.rb', line 240

def unblock()
  @q.unblock()
end

#valueObject



211
212
213
214
215
216
217
218
219
# File 'lib/buzzcore/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/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