我想在Ruby中“复制”CUDA的__synchtreads()
函数的行为。具体来说,我有一组需要执行一些代码的N
个线程,然后所有线程在执行到某一点时互相等待,然后再继续执行其余的业务。例如:
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 }
我需要使用哪些工具才能完成这个任务?我尝试使用全局哈希表,然后睡眠直到所有线程都设置了一个标志,表示他们已经完成了代码的第一部分。但是我无法使它正常工作;它导致了挂起和死锁。我认为我需要使用
Mutex
和 ConditionVariable
的组合,但我不确定为什么/如何使用。
编辑:50个浏览量,没有答案!看来可以考虑赏金...
sleep()
被认为是不良实践吗? - user2398029Thread#join
或者使用Fiber
来解决这个问题。 - sawafiber
添加为一个标签。 - user2398029