Так ошибочный сам подход, что параметр "число потоков" является ручкой настройки.

Он влияет на код.

Примите допущение, что у вас в адресном пространстве не более 1 аппаратного треда (при многих сопрограммах) - и вам не надо думать о повторной входимости и мониторах/критических секциях для каждого объекта.

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

Вот на последнем Дне Оберона это сначала разбирал Дмитрий Дагаев, потом я рассказывал в "Практических аспектах..." о нашей реализации сопрограмм.
http://oberoncore.ru/oberonday/2017
И, кстати, принцип диалектического развития технических систем: сначала запрети что-то, а потом разреши на новом уровне...
Я там рассказываю про то, как ограниченная мультитредовость в общем пространстве далее вводится, для взаимодействия с внешним миром и для изолированных алгоритмов. Но без блокировок, внезапно.