# Threads demo from pickaxe book - newbie question

**URL:** <https://www.ruby-forum.com/t/threads-demo-from-pickaxe-book-newbie-question/92748>\
**Category:** Ruby\
**Created:** [April 23, 2007, 6:46pm UTC](https://www.ruby-forum.com/t/threads-demo-from-pickaxe-book-newbie-question/92748 "2007-04-23T18:46:02Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![crose1](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc348/32.png) [@crose1](https://www.ruby-forum.com/u/crose1)\
**Post date:** [April 23, 2007, 6:46pm UTC](https://www.ruby-forum.com/t/threads-demo-from-pickaxe-book-newbie-question/92748/1 "2007-04-23T18:46:02Z")

</div>

All,

Please forgive a newbie question - I have tried searching for errata on  
the Pickaxe book (2nd ed) but not found an answer. I am running Ruby  
1.8.2 on WinXP. I type in, or source from file, the example - from pg.  
143, copied below - into the interactive ruby prompt in the fxri tool.  
I get to the line

t1.join ; t2.join

and the tool hangs. Is this expected? Is there some better way(s) to  
debug thread-related issues? Thanks for any advice -

Chris

P.S. Could someone please explain the purpose of the ‘super’ command in  
this script? Thx -

-----------------------\<begin example pg. 143\>----------------------

# with my current version of fxri, this hangs

require ‘monitor’  
class Counter \< Monitor  
attr\_reader :count  
def initialize  
@count = 0  
super  
end  
def tick  
synchronize do  
@count += 1  
end  
end  
end

c = Counter.new  
t1 = Thread.new { 100\_000.times { c.tick } }  
t2 = Thread.new { 100\_000.times { c.tick } }

t1.join ; t2.join

c.count

---

<div class="post-metadata">

**Author:** ![crose1](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc348/32.png) [@crose1](https://www.ruby-forum.com/u/crose1)\
**Post date:** [April 23, 2007, 7:24pm UTC](https://www.ruby-forum.com/t/threads-demo-from-pickaxe-book-newbie-question/92748/2 "2007-04-23T19:24:32Z")

</div>

The super call is calling the initialize function in The base class,  
in this case Monitor

---

<div class="post-metadata">

**Author:** ![crose1](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/9fc348/32.png) [@crose1](https://www.ruby-forum.com/u/crose1)\
**Post date:** [April 23, 2007, 7:49pm UTC](https://www.ruby-forum.com/t/threads-demo-from-pickaxe-book-newbie-question/92748/3 "2007-04-23T19:49:35Z")

</div>

I ran your script as a file and not from irb. works just fine, but  
really doesn’t show the threads working that well. You should just  
try something like

t1 = Thread.new { 1\_000.times { puts ‘thread 1’ } }  
t2 = Thread.new { 1\_000.times { puts ‘thread 2’ } }  
t3 = Thread.new { 1\_000.times { puts ‘thread 3’ } }  
t4= Thread.new { 1\_000.times { puts ‘thread 4’ } }
