C # требует блокировки при замене ссылки на переменную в многопоточном приложении

У меня есть приложение, в котором я хочу, чтобы несколько потоков читали список. Я хочу периодически обновлять список новыми данными. Когда список обновлен, я полагаю, что могу создать новый список и заменить его старым. Пример:

private List<string> _list = new List<string>();
private void UpdateList()
{
    var newList = new List<string>(QueryList(...));
    _list = newList;
}

private void ThreadRun()
{
    foreach (var item in _list)
    {
        // process item...
    }
}

В методе UpdateList создается новый список, и ссылка _list заменяется новым списком. На мой взгляд, любой существующий поток по-прежнему будет содержать ссылку на старый список (что для меня нормально), любой новый поток получит новый список. В конце концов, все потоки закончатся, и старый список будет в конечном итоге собран мусором. Требуется ли какая-либо блокировка в этом коде или есть что-то, что мне нужно сделать для обеспечения безопасного многопоточного доступа?

13
задан Mas 17 January 2012 в 16:54
поделиться