Книга: Программирование для 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()
.
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- СТРУКТУРА ПРОСТОЙ ПРОГРАММЫ
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Фрагменты знаний. Ссылки
- 1.2.5. Пример программы
- 24.7. Использование программы-твикера
- Листинг 15.11. Код для загрузки файла с Web-сервера
- Часть III Прикладные программы
- Цикл создания программы
- Описание программы настройки BIOS
- Программы для восстановления данных
- Программы для тестирования привода