Я пытаюсь реализовать параллельную версию игры Game Of Life.Parallel Game Of Life - Обмен информацией между потоками
Эта параллельная версия делит плату игры на регионы, каждая из которых управляется одним потоком, который отвечает за вычисление следующего состояния этого региона и после этого проводит обновление состояния.
Одним из ограничений, с которыми я столкнулся, является тот факт, что «каждому потоку разрешено доступ только к собственным ячейкам региона. Вся другая информация должна передаваться из соседних потоков некоторой другой памятью».
Итак, как я понимаю это, даже если один поток пытается прочитать только из ячейки вне его региона, он должен каким-то образом запросить это состояние из определенного потока, который запускает эту ячейку.
Мы рекомендуем рассмотреть решение производителя/потребителя для этой задачи, и поэтому я рассмотрел использование публичной статической очереди продуктов/потребителей, в которую запросы штата должны быть установлены в очередь, но некоторые другие связанные с этим проблемы не ясны:
Если поток а проводит работу в данный момент, как я могу попросить его, чтобы остановить его работу и резьба B это запрос информации и возобновить его предыдущую работу после этого? Возможно ли это?
Какой поток несет ответственность за эту очередь? уникальный поток, который управляет очередью параллельно потокам регулярных областей? Я не уверен.
каждый регион thresd знает о количестве своих соседей за пределами своего региона. поэтому он должен подписаться на канал приемника, по которому поступают отсутствующие данные о занятости, и канал отправителя, текущие данные о занятости передаются. для каждой ячейки количество релевантных сообщений может быть сохранено после завершения всей необходимой информации. этот эскиз предполагает, что для игры есть синхронизирующая часовая нить. – collapsar