Critical section is serialized — only one thread inside at a time. Throughput plateau: 1 / critical_section_duration. More threads past that point just add wait time.
This is why coarse locks kill scalability. Split into finer locks (per-shard, per-key), use read-write locks for read-heavy work, or use lock-free data structures for hottest paths.