Короткий ответ
Нет, вам не нужен какой-либо механизм блокировки или синхронизации, поскольку ваша проблема выглядит как смущающе параллельная задача .
Более длинный ответ
Условия гонки, которые могут появиться, только если два потока могут одновременно обращаться к одной и той же памяти и хотя бы один из них является операцией записи . Если ваша программа предоставляет эту характеристику, то вам нужно убедиться, что потоки обращаются к памяти упорядоченным образом. Один из способов сделать это - использовать блокировки (хотя и не единственный). В противном случае результат UB. Кажется, вы нашли способ разделить работу между потоками, так как каждый поток может работать независимо от других. Это лучший вариант для параллельного программирования, так как он не требует никакой синхронизации. Сложность кода значительно снижается, и обычно ускорение будет увеличиваться.
Обратите внимание, что, как указано @ acelent в разделе комментариев, если вам нужны изменения, сделанные одним потоком,видимый в другом потоке, вам может потребоваться какая-то синхронизация из-за того факта, что в зависимости от модели памяти и HW изменения, сделанные в одном потоке, могут быть не сразу видны в другом.
Это означает, что вы можете записать из Thread 1
в переменную и через некоторое время прочитать ту же память из Thread 2
, но при этом не сможете увидеть запись, сделанную Thread 1
.