Новое мышление SyncRoot заключается в том, что это было ошибкой в оригинальном дизайне. Если единственное, что нужно заблокировать, - это словарь, который является частным, вы можете заблокировать его или другой объект, который служит объектом синхронизации. Последний метод полезен, когда состояние, которое вы защищаете, - это больше, чем просто словарь.
// used as you would have used SyncRoot before
object _syncLock = new object();
Dictionary<string, int> numberMapper = new Dictionary<string, int>();
// in some method...
lock (_syncLock)
{
// use the dictionary here.
}