Здравствуйте, elmal, Вы писали:
B>>Странно. Нет никаких предпосылок для того чтоб запись в разные индексы массива была не потокобезопасной. E>Вообще, если копать очень глубоко, то предпосылки есть. Процессоры многоядерные, с отдельным кешем под каждое ядро. В одном потоке меняют, в другом не факт что видно. Тут просто примитивы могут не быть видны без volatile, а с массивами то еще сложнее вроде ситуация.
А что там сложного? Массив инициализируется один раз и до запуска нитей-счетчиков, вся необходимая память выделяется сразу же. Взять недоинициализированный массив ни одна из нитей не может. Границы индексов у каждой нити свои и тоже рассчитываются до начала их работы. Основная нить начинает работу с массивом только после окончания работы всех нитей-счетчиков. То есть, все данные, касающиеся массива и его границ, известны до запуска нитей-счетчиков, так что никакого фейла из-за отсутствия volatile быть не может.
Не вижу ни одной причины, по которой может происходить ошибка из-за многопоточной среды.
Думаю, это скорее логическая ошибка в рассчетах или в распределении области для хранения данных.