Thread Safety

J

jwesley

I'm an experienced developer starting to learn Ruby. On the whole I
think Ruby is a great language. My concerns are with thread safety...

1) An exception is stored in a global variable, "$!". If multiple
threads have exceptions thrown, is the the thread guaranteed to get
it's own exception (not another threads) when evaluating the "$!". (I
know there is a work around by naming the exception.)

2) Does ruby commonly use global values to pass values...which is not
thread safe (unless it's somehow "thread-local").

3) Is there any plan to use OS-level threads in Ruby 2.0? A simple
thread example I wrote was incredibly slow and I think it was because
many "slow-to-return" OS calls were being made...

thanks,
Justin
 
K

Kirk Haines

1) An exception is stored in a global variable, "$!". If multiple
threads have exceptions thrown, is the the thread guaranteed to get
it's own exception (not another threads) when evaluating the "$!". (I
know there is a work around by naming the exception.)

2) Does ruby commonly use global values to pass values...which is not
thread safe (unless it's somehow "thread-local").

Don't use globals. I can't think of a single instance where one needs to use
them, though maybe someone else can. So, if you do want to use them, use a
mutex.synchronize block around them.
3) Is there any plan to use OS-level threads in Ruby 2.0? A simple
thread example I wrote was incredibly slow and I think it was because
many "slow-to-return" OS calls were being made...

Yes. OS level threads are going to be supported in Ruby 2.0.

At the current time, if one has code that is making a lot of calls which will
block, the best alternative is to use a multiprocess model instead of a
multithreaded model.


Kirk Haines
 
B

Bill Kelly

From: "Kirk Haines said:
Don't use globals. I can't think of a single instance where one needs to use
them, though maybe someone else can. So, if you do want to use them, use a
mutex.synchronize block around them.

But, yes, variables like $&, $`, $', $1..$n and I've no doubt $! are
really thread-local.


Regards,

Bill
 
K

Kirk Haines

But, yes, variables like $&, $`, $', $1..$n and I've no doubt $! are
really thread-local.

Which is cool, I agree, but in general, my position is still to not use
globals, and just sidestep the whole issue.


Kirk Haines
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top