I'm trying to "replicate" the behaviour of CUDA's __synchtreads()
function in Ruby. Specifically, I have a set of N
threads that need to execute some code, then all wait on each other at mid-point in execution before continuing with the rest of their business. For example:
x = 0
a = Thread.new do
x = 1
syncthreads()
end
b = Thread.new do
syncthreads()
# x should have been changed
raise if x == 0
end
[a,b].each { |t| t.join }
What tools do I need to use to accomplish this? I tried using a global hash, and then sleeping until all the threads have set a flag indicating they're done with the first part of the code. I couldn't get it to work properly; it resulted in hangs and deadlock. I think I need to use a combination of Mutex
and ConditionVariable
but I am unsure as to why/how.
Edit: 50 views and no answer! Looks like a candidate for a bounty...