List(T).Count being thread safe is an implementation detail, and not guaranteed by the documentation of List(T).Count.  Based on that, the correct thing to do is lock for the duration of Count.  If it is a thread safe operation, the cost is minimal.