public int GetId(object obj) { lock (locker) { var reference = new ObjectReference(obj); int id; if (objToId.TryGetValue(reference, out id)) { return id; } else { var new_id = AllocateId(); objToId.Add(reference, new_id); return new_id; } } }