У нескольких потоков не должно возникнуть проблем при считывании одного и того же значения памяти.Может быть небольшое ожидание на уровне операционной системы или аппаратного обеспечения, в то время как память фактически используется для каждого потока, но в большинстве случаев это незначительно, и не легко обойти.
Что привлекло мое внимание к вашему описанию проблемы, так это то, что «десятки [потоков] могут пытаться прочитать одно и то же значение».Если одновременно обрабатываются десятки активных потоков, узким местом является управление потоками.Как и все остальное, существует закон убывающей отдачи и масштабов;на текущем оборудовании примерно в два раза больше активных потоков в качестве «исполнительных блоков» (ядер, логических процессоров HT, однако архитектура обрабатывает многопоточное выполнение), ваш ЦП начинает тратить больше времени на планирование выполнения потоков и управление состояниями потоков, чем фактически выполняетрезьбовые инструкции.Да, ваш диспетчер задач может показывать сотни потоков в полете, но подавляющее большинство из них «спят», прислушиваются к взаимодействию с пользователем или просто ждут (как потоки опроса).
Я бы посмотрел на сокращение количества потоков до не более двух на «единицу исполнения», и в идеале всего на пару больше, чем количество единиц исполнения (поэтому в ЕС есть поток, который нужно «переключать», покаФСБ читает память для другого потока).Это сократит время, затрачиваемое вашим компьютером на управление всеми этими потоками.