Реализация барьера синхронизации в 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 просмотров и нет ответа! Похоже, кандидат на награду ...