CoreClr is able to use object header bits for locking in trivial cases. That makes typical use of lock fairly cheap. NativeAOT does not have that and lock(obj) is always a "fat lock".
This is likely the reason for regressions in ConcurrentDictionary benchmarks.
(re: #68891)