Я понимаю, что для примитивного типа volatile может сразу же отражать изменения значений из другого потока
Вы неправильно понимаете, по крайней мере, тремя способами.Вам не следует пытаться использовать volatile до тех пор, пока вы глубоко не поймете все о слабых моделях памяти, приобретении и выпуске семантики и о том, как они влияют на вашу программу.
Прежде всего, будьте уверены, что volatile влияет переменные , а не значения .
Во-вторых, volatile не влияет на переменные, содержащие значения типов значений, иначе, чем на переменные, содержащие ссылки.
В-третьих, volatile не означает, что изменения значений из других потоков видны сразу .Volatile означает, что переменные имеют семантику получения и выпуска .Volatile влияет на порядок, в котором могут наблюдаться побочные эффекты мутаций памяти, происходящих из определенного потока .Идея о том, что существует последовательный универсальный порядок мутаций и что эти мутации в этом порядке можно наблюдать мгновенно из всех потоков, не является гарантией, сделанной моделью памяти.
Однако как насчет содержимого объекта?
А как насчет этого?Место хранения, на которое ссылается переменная переменного типа ссылки, не должно иметь каких-либо особых характеристик потоков.
Если один поток вызывает функцию AddValue, адрес списка не изменится, обновится ли другой потокоб "содержательном" изменении списка.
Нет.С чего бы это?Этот другой поток может быть на другом процессоре, и этот кэш процессора, возможно, предварительно загрузил страницу, содержащую адрес массива, который поддерживает список.Отключение списка могло изменить местоположение хранилища, содержащее адрес массива, чтобы ссылаться на какое-то совершенно другое местоположение.
Конечно, класс списка не является поточно-ориентированным.Если вы не блокируете доступ к списку, тогда список может просто рухнуть и умереть, когда вы попытаетесь это сделать.
Вам не нужен volatile;все, что вам нужно, это установить блокировку потоков вокруг доступа к списку.Поскольку блокировки нитей создают полные заборы, вам не нужно использовать половину заборов, введенных volatile.