Сообщение Re: Closures in plain C. от 14.12.2021 12:38
Изменено 14.12.2021 12:42 kov_serg
Re: Closures in plain C.
Здравствуйте, fk0, Вы писали:
fk0> Существует возможность привести такой код к следующей форме:
fk0>
Что мешает использовать менеджер ресурсов, который будет следить за выделением ресурсов и он же будет их освобождать.
Выглядеть будет примерно так
fk0> Существует возможность привести такой код к следующей форме:
fk0>
fk0> SCOPE_GUARD
fk0> {
fk0> void * const p = malloc(25);
fk0> DEFER(free, p);
fk0> void * const q = malloc(25);
fk0> DEFER(free, q);
fk0> if (mtx_lock(&mut) == thrd_error)
fk0> return or break;
fk0> DEFER(mtx_unlock, &mut);
fk0> }
fk0>
Что мешает использовать менеджер ресурсов, который будет следить за выделением ресурсов и он же будет их освобождать.
Выглядеть будет примерно так
static void body_code(scope_t *s) {
void *p, *q; mutex_t m[1];
p=s->mem_alloc(25);
if (s->mutex_lock(m)) return;
q=s->mem_alloc(25);
}
void body(scope_t *s) {
s->exec(body_code);
}
Re: Closures in plain C.
Здравствуйте, fk0, Вы писали:
fk0> Существует возможность привести такой код к следующей форме:
fk0>
Что мешает использовать менеджер ресурсов, который будет следить за выделением ресурсов и он же будет их освобождать.
Выглядеть будет примерно так
fk0> Существует возможность привести такой код к следующей форме:
fk0>
fk0> SCOPE_GUARD
fk0> {
fk0> void * const p = malloc(25);
fk0> DEFER(free, p);
fk0> void * const q = malloc(25);
fk0> DEFER(free, q);
fk0> if (mtx_lock(&mut) == thrd_error)
fk0> return or break;
fk0> DEFER(mtx_unlock, &mut);
fk0> }
fk0>
Что мешает использовать менеджер ресурсов, который будет следить за выделением ресурсов и он же будет их освобождать.
Выглядеть будет примерно так
static void body_code(scope_t *s) {
void *p, *q; mutex_t m[1];
p=scope_mem_alloc(s,25);
if (scope_mutex_lock(s,m)) return;
q=scope_mem_alloc(s,25);
}
void body(scope_t *s) {
scope_exec(s,body_code);
}