portnov Minoru: "на уровне языка" я имел ввиду чтобы в типе было видно, что у тебя залочено, что нет, и доступные методы были ограничены так, что неположенное залочить нельзя
O01eg у контекста есть метод lock куда передаётся следующий мутекс на блокировку и который проверяет, что в уже заблоченных есть только этот же рекурсивный мутекс, или подходящий по приоритету
Minoru portnov: звучит как ReaderT pattern, позволяющий функции видеть только те локи, которые она может лочить. Уже залоченные штуки функция должна получать через аргументы (чтобы избежать попытки залочить повторно)
portnov Minoru: хотя я подозреваю что там есть какой-нибудь детектор. Редко использовал STM на всю катушку, но даже с обычными MVar неоднократно натыкался на то, что рантайм весьма эффективно детектит дедлоки (и роняет софтину вместо зависания)