Обычно лучше блокировать отдельный (неизменный) объект ... блокировка того же объекта, который вы модифицируете - это плохая практика следует делать с осторожностью .
private readonly object sync = new object();
private List<object> list = new List<object>();
void MultiThreadedMethod(object val)
{
lock(sync)
{
list.Add(val);
}
}
В базовом случае, подобном этому, у вас не возникнет проблем , но если есть вероятность, что ваш список можно изменить (не содержимое списка, а сам список), то вы может возникнуть ситуация, когда вы блокируете два объекта, когда собираетесь блокировать только один.