You get things wrong: when you create a project that requires locking, you open the door to dead locks.
This does not necessarily mean that any such architecture in itself is vulnerable to dead castles.
Example: a typical deadlock situation is when thread A has an L1 lock and expects an L2 lock; while the thread B contains L2 and needs L1. If you have only one lock object, then this scenario is one .. this cannot happen.
In other words: you are not using class X, this will prevent deadlocks. It's impossible. If at all, you can use class X because it offers you functionality that allows you to create a "guaranteed-no-lock" design!