Class: Threads
- Inherits:
-
Object
- Object
- Threads
- Defined in:
- lib/threads.rb
Overview
Threads.
- Author
-
Yegor Bugayenko ([email protected])
- Copyright
-
Copyright © 2018 Yegor Bugayenko
- License
-
MIT
Instance Method Summary collapse
- #assert(reps = @total) ⇒ Object
-
#initialize(total = Concurrent.processor_count * 8, log: STDOUT) ⇒ Threads
constructor
A new instance of Threads.
Constructor Details
#initialize(total = Concurrent.processor_count * 8, log: STDOUT) ⇒ Threads
Returns a new instance of Threads.
33 34 35 36 37 38 39 |
# File 'lib/threads.rb', line 33 def initialize(total = Concurrent.processor_count * 8, log: STDOUT) raise "Total can't be nil" if total.nil? raise "Total can't be negative or zero: #{total}" unless total.positive? @total = total raise "Log can't be nil" if log.nil? @log = log end |
Instance Method Details
#assert(reps = @total) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/threads.rb', line 41 def assert(reps = @total) if reps < @total raise "Repetition counter #{reps} can't be smaller than #{@total}" end done = Concurrent::AtomicFixnum.new rep = Concurrent::AtomicFixnum.new pool = Concurrent::FixedThreadPool.new(@total) latch = Concurrent::CountDownLatch.new(1) @total.times do |t| pool.post do Thread.current.name = "assert-thread-#{t}" latch.wait(10) loop do r = rep.increment break if r > reps begin yield(t, r - 1) rescue StandardError => e print(Backtrace.new(e)) raise e end end done.increment end end latch.count_down pool.shutdown raise "Can't stop the pool" unless pool.wait_for_termination(30) return if done.value == @total raise "Only #{done.value} out of #{@total} threads completed successfully" end |