Re[3]: Запись в массив double-ов из нескольких потоков
От: Donz Россия http://donz-ru.livejournal.com
Дата: 11.05.11 06:56
Оценка:
Здравствуйте, elmal, Вы писали:

B>>Странно. Нет никаких предпосылок для того чтоб запись в разные индексы массива была не потокобезопасной.

E>Вообще, если копать очень глубоко, то предпосылки есть. Процессоры многоядерные, с отдельным кешем под каждое ядро. В одном потоке меняют, в другом не факт что видно. Тут просто примитивы могут не быть видны без volatile, а с массивами то еще сложнее вроде ситуация.

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