I don't mind to sound crass, but it sounds like you implemented microservices poorly. You could s/microservices/threads/g on your post above and it would point much more to a problem with your implementation rather than a problem with threads.
Micro services are hard to write, so don't write them unless you absolutely have to.
Monoliths have the advantage of being able to trivially take out a global lock.
Removing global locks from a monolith to migrate to a micro-service deployment adds a ton of design and engineering cost.