Я реализую эту маленькую игру идею, которая (как-то?), Похожую на игру Конвея жизнь:Может ли многопоточность повлиять на клон «Игра жизни» Конвей?
0) У Вас есть матрица цветных точек (значение RGB) 1) Если соседняя ячейка имеет более низкое значение X, чем ваш Y, положить Y = 0 на этой ячейке (где X и Y являются красный || Зеленый || Синий) 2) Красный бьет Зеленый бьет Синий бьет Красный
Что я делаю сейчас это просто происходит по ячейке, проверяя, соблюдены ли вышеприведенные правила. Тем не менее, поведение это не совсем то, что я намеревался, так как иногда ячейки в первых рядах имеют преимущество перед теми, что находятся в конечных строках.
Может ли многопоточность предотвратить это (скажем, запуск двух потоков, один из которых начинается в первой ячейке, а другой на последнем)? Пожалуйста, помилуй мое невежество на параллелизм, но я чувствовал, что это хороший способ начать работать с ним.
Но после того, как вы изменили использование второй матрицы, это было бы чем-то, что могло бы значительно ускориться при многопоточности.Если вы создали два потока, один из которых выполняет верхнюю половину, а второй делает нижнюю половину (чтобы они никогда не писали в одно и то же пространство памяти), вам вообще не понадобилась бы синхронизация - они оба будут летать на полной скорости. –
Спасибо за совет. Действительно, я обновлял матрицу ipso facto, а не сохранял изменения и применял их в конце. Я изменю его, используя идею DeadMG. @Bill K: Вы имеете в виду использование многопоточности для применения изменений от новой матрицы в исходной матрице? –
@Bill K: Конечно, вопрос был о многопоточности и первом дисбалансе строк. @ Gastón: Вы можете представить несколько способов многопоточной программы. Но в этом случае у вас будет один поток для печати текущего состояния вашей игры, а затем, если ваша матрица большая, вы можете иметь несколько потоков для обновления разделяемой части матрицы. Например, с двумя потоками вы можете обновлять половинки новой матрицы, одновременно считывая одну и ту же исходную матрицу, а затем копировать в исходную матрицу, когда оба потока завершают работу. – Scharron