Re[4]: Запись в массив double-ов из нескольких потоков
От: Nicht Россия  
Дата: 11.05.11 07:07
Оценка:
Здравствуйте, Donz, Вы писали:


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

D>Не вижу ни одной причины, по которой может происходить ошибка из-за многопоточной среды.
D>Думаю, это скорее логическая ошибка в рассчетах или в распределении области для хранения данных.

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