Я запутался в volatile
для ссылочного типа.
Я понимаю, что для примитивного типа, volatile
может отражать изменения значения из другого потока немедленно. Для ссылочного типа он может отражать изменения адреса немедленно. Однако, что насчет содержимого объекта. Они все еще кэшируются?
(Предполагая, что List.Add()
является атомарной операцией)
Например, у меня есть:
class A
{
volatile List<String> list;
void AddValue()
{
list.Add("a value");
}
}
Если один поток вызывает функцию AddValue
, адрес списка не меняется, получит ли другой поток обновление об изменении "содержимого" списка, или содержимое может кэшироваться для каждого потока и не обновляться для других потоков?