Блокирующий вызов юзеровской функции. Способ избеганий лишних критических секций. В примере про логгер -> попытка отказа от критической секции при выделении блока памяти привелка к некоей возне с записью и проверкой переменных, а также к потенциальной проблеме при хаотичной передаче управления. Было бы проще, если бы можно было сделать так:
* есть некая юзеровская функция, реентерабельная, которая (в идеале - на этапе написания кода) регистрируется как специальная блокирующая. Ось делет так, что вызов этой функции означает монопольную передачу ей управления, т.е. конкурирующим кодом, которые лезет в ту же память, она не прерываеся, а прерывания - они у нас всегда разрешены :)
* поток при жалании аллокировать буфер пишет флаг - временное повышение приоритета до максимума на время t, оно же мягкая критическая секця
* если в это время случится системный тик, то он отрабатывает вхолостую, и прерывание тика переставляется на время t
* вызывается наша специальная функция. Она пишет в системные параметры, что прерывать ее нелья, делает свое дело, перед возвратом делат мягкую притическую секцию, снимает свой родной запрет, возвращяется
* блок в этот момент четко аллокирован, и никто его на заховает
* поток в обычном режиме работает с блоком, прервали - так прервали.