Shared locking allows other executions to take place at the same time for the instance in question, if and only if these are shared lock executions as well. In other words, exclusively locked instances cannot be accessed by a shared method at the same time.
Technically, the locking key consists of the fully qualified name of the component instance in which the model version has been removed, e.g.
With multiple method executions in parallel, it may well happen, that two or more executions are trying to lock different instances interdependently, i.e. two methods each owning a lock on instance A and B trying to lock the other instance, respectively. This so-called deadlock situation will be detected by the system prior to acquiring the instance lock in question, so that no two executions end up waiting for each other. In fact, the latter of the two executions will be aborted, thus preventing the deadlock situation detected.