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

Ответы на вопрос(2)

Ваш ответ на вопрос