Yes, because a lock acquired by a low-priority job will block a high-priority job. Now, locks usually protect a very short piece of synchronous code. This makes locks a less nasty beast than async semaphores, even if you can write programs that use locks in a pathological way. See also this answer about the relationship between locks and Swift concurrency: [Pitch] Synchronous Mutual Exclusion Lock - #15 by Alejandro
Finally, developers still need to synchronize threads. The linked pitch states:
The main issue is that there isn't a single standardized implementation for this synchronization primitive resulting in everyone needing to roll their own.