I'd say the vast majority of cases where I use a lock/semaphore is around very expensive resources, where the utilization of that resource vastly outweighs any performance overhead of the lock.
For highly contended data structures, spinlocks (and nowadays explicit atomics) are likely better.