readwrite lock on GetOrAdd