Identifiable mutex lock which does thread locking of Hashable instances per their identifiers
Allows only one identifier to be changed at the same time
- Per identifier locking is implented using a Dictionary of objects with
hasValuestring as key andDispatchSemaphoreas value - When
performChanges:is called with given object asemaphore.wait()is called synchronously until ongoing changes to identifier in question are finished