Мне любопытно узнать о различии ниже двух примеров.блокировка целевым объектом self
случай 1) блокировка от чтения объекта
private readonly object key = new object();
private List<int> list = new List<int>;
private void foo()
{
lock(key){
list.add(1);
}
}
Случай 2.) замок самой
private List<int> list = new List<int>;
private void foo()
{
lock(list){
list.add(1);
}
}
оба случая потокобезопасные достаточно целевого объекта? Мне интересно, если сборщик мусора меняет адрес переменной list
(например, 0x382743 => 0x576382) в какой-то момент, чтобы он мог не работать поточно-безопасным.