Интересный пример избавления от локов с помощью очереди тасков.

Очень похоже на то что делают Executors в Java. Например сделав Executor, который выполняет входящие таски в один поток мы гарантируем, что только этот поток и имеет доступ к ресурсу.

А с помощью Future можно избавиться от callback ада, и делать вид что все выполняется синхронно последовательно.