Книга: Программирование для Linux. Профессиональный подход

Листинг 4.8. (cleanup.c) Фрагмент программы, содержащий обработчик очистки потока

Листинг 4.8. (cleanup.c) Фрагмент программы, содержащий обработчик очистки потока

#include <malloc.h>
#include <pthread.h>
/* Выделение временного буфера. */
void* allocate_buffer(size_t size) {
 return malloc(size);
}
/* Удаление временного буфера. */
void deallocate_buffer(void* buffer) {
 free(buffer);
}
void do_some_work() {
 /* Выделение временного буфера. */
 void* temp_buffer = allocate_buffer(1024);
 /* Регистрация обработчика очистки для данного буфера. Этот
    обработчик будет удалять буфер при завершении или отмене
    потока. */
 pthread_cleanup_push(deallocate_buffer, temp_buffer);
 /* Выполнение других действий... */
 /* Отмена регистрации обработчика. Поскольку функции передается
    ненулевой аргумент, она выполняет очистку, вызывая функцию
    deallocate_buffer(). */
 pthread_cleanup_pop(1);
}

В данном случае функции pthread_cleanup_pop() передается ненулевой аргумент, поэтому функция очистки deallocate_buffer() вызывается автоматически. В данном простейшем случае можно было в качестве обработчика непосредственно использовать стандартную библиотечную функцию free().

Оглавление книги


Генерация: 1.219. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз