Нейл Мэтью - Основы программирования в Linux

Тут можно читать онлайн Нейл Мэтью - Основы программирования в Linux - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство «БХВ-Петербург», год 2009. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Основы программирования в Linux
  • Автор:
  • Жанр:
  • Издательство:
    «БХВ-Петербург»
  • Год:
    2009
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-9775-0289-4
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Нейл Мэтью - Основы программирования в Linux краткое содержание

Основы программирования в Linux - описание и краткое содержание, автор Нейл Мэтью, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.

Для начинающих Linux-программистов

Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)

Основы программирования в Linux - читать книгу онлайн бесплатно, автор Нейл Мэтью
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

#include

#include

#include

#include

void *thread_function(void *arg);

char message[] = "Hello World";

int thread_finished = 0;

int main() {

int res;

pthread_t a_thread;

pthread_attr_t thread_attr;

res = pthread_attr_init(&thread_attr);

if (res != 0) {

perror("Attribute creation failed");

exit(EXIT_FAILURE);

}

res = pthread_attr_setdetachstate(&thread_attr,

PTHREAD_CREATE_DETACHED);

if (res != 0) {

perror("Setting detached attribute failed");

exit(EXIT_FAILURE);

}

res = pthread_create(&a_thread, &thread_attr,

thread_function, (void *)message);

if (res != 0) {

perror("Thread creation failed");

exit(EXIT_FAILURE);

}

(void)pthread_attr_destroy(&thread_attr);

while (!thread_finished) {

printf("Waiting for thread to say it's finished...\n");

sleep(1);

}

printf("Other thread finished, bye!\n");

exit(EXIT_SUCCESS);

}

void *thread_function(void *arg) {

printf("thread_function is running. Argument was %s\n", (char *)arg);

sleep(4);

printf("Second thread setting finished flag, and exiting now\n");

thread_finished = 1;

pthread_exit(NULL);

}

Вывод не принесет сюрпризов:

$ ./threads

Waiting for thread to say it's finished...

thread_function is running. Argument was Hello World

Waiting for thread to say it's finished...

Waiting for thread to say it's finished...

Waiting for thread to say it's finished...

Second thread setting finished flag, and exiting now

Other thread finished, bye!

Как видите, установка отсоединенного состояния позволяет второму потоку завершиться независимо, без необходимости исходному потоку ждать этого события.

Как это работает

В исходном тексте программы два важных фрагмента:

pthread_attr_t thread_attr;

res = pthread_attr_init(&thread_attr);

if (res != 0) {

perror("Attribute creation failed");

exit(EXIT_FAILURE);

}

который объявляет атрибут потока и инициализирует его, и

res = pthread_attr_setdetachstatе(&thread_attr, PTHREAD_CREATE_DETACHED);

if (res != 0) {

perror("Setting detached attribute failed");

exit(EXIT_FAILURE);

}

который устанавливает значения атрибутов для задания отсоединенного состояния потока.

К другим незначительным отличиям относится создание потока с передачей адреса атрибутов:

res = pthread_create(&a_thread, &thread_attr, thread_function, (void*)message);

и для завершенности уничтожение атрибутов после их использования:

pthread_attr_destroy(&thread_attr);

Атрибуты планирования потока

Давайте рассмотрим второй атрибут потока, который вам, возможно, захочется изменить, — атрибут планирования. Изменение этого атрибута очень похоже на установку отсоединенного состояния потока, но есть дополнительные функции, которые можно применять для подбора допустимых уровней приоритета, sched_get_priority_maxи sched_get_priority_min.

Выполните упражнение 12.6.

Упражнение 12.6. Планирование

Поскольку данная программа thread6.c очень похожа на программу предыдущего упражнения, мы рассмотрим только отличия.

1. Прежде всего, вам понадобится несколько дополнительных переменных:

int max_priority;

int min_priority;

struct sched_param scheduling_value;

2. После того как установлен атрибут отсоединения, вы задаете политику планирования:

res = pthread_attr_setschedpolicy(&thread_attr, SCHED_OTHER);

if (res != 0) {

perror("Setting scheduling policy failed");

exit(EXIT_FAILURE);

}

3. Далее находите диапазон допустимых приоритетов

max_priority = sched_get_priority_max(SCHED_OTHER);

min_priority = sched_get_priority_min(SCHED_OTHER);

и задаете один из них:

scheduling_value.sched_priority = min_priority;

res = pthread_attr_setschedparam(&thread_attr, &scheduling_value);

if (res != 0) {

perror("Setting scheduling priority failed");

exit(EXIT_FAILURE);

}

Когда вы запустите программу, то получите следующий вывод:

$ ./thread6

Waiting for thread to say it's finished...

thread_function is running. Argument was Hello World

Waiting for thread to say it's finished...

Waiting for thread to say it's finished...

Waiting for thread to say it's finished...

Second thread setting finished flag, and exiting now

Other thread finished, bye!

Как это работает

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

Отмена потока

Иногда требуется, чтобы один поток попросил другой завершиться досрочно способом, очень похожим на отправку ему сигнала. Сделать это можно с помощью потоков и параллельно с помощью обработки сигнала; у потоков появляется возможность изменить свое поведение, когда их просят завершиться.

Давайте сначала рассмотрим функцию для создания запроса на завершение потока.

#include

int pthread_cancel(pthread_t thread);

Она достаточно проста: имея идентификатор потока, вы можете запросить его аннулирование. На приемном конце запроса на отмену все немного сложнее, но не слишком. Поток может установить состояние отмены с помощью функции pthread_setcancelstate.

#include

int pthread_setcancelstate(int state, int *oldstate);

Первый параметр равен либо значению PHTREAD_CANCEL_ENABLE, позволяющему получать запросы на отмену, либо PTHREAD_CANCEL_DISABLE, заставляющему игнорировать подобные запросы. Указатель oldstateдает возможность получить предыдущее состояние. Если оно вас не интересует, можно просто передать в этом параметре NULL. Если запросы на отмену принимаются, есть второй уровень управления, принимаемый потоком, — тип отмены, который задается функцией pthread_setcanceltype.

#include

int pthread_setcanceltype(int type, int *oldtype);

Тип отмены может принимать одно из следующих значений: PTHREAD_CANCEL_ASYNCHRONOUS, заставляющее обрабатывать запросы на отмену немедленно, и PTHREAD_CANCEL_DEFERRED, заставляющее запросы на отмену ждать, пока поток не выполнит одну из следующих функций: pthread_join, pthread_cond_wait, pthread_cond_timedwait, pthread_testcancel, sem_waitили sigwait.

Мы не описываем все эти функции в данной главе, поскольку, как правило, не все они нужны. Когда они понадобятся, вы сможете найти дополнительную информацию на страницах интерактивного справочного руководства.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Нейл Мэтью читать все книги автора по порядку

Нейл Мэтью - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Основы программирования в Linux отзывы


Отзывы читателей о книге Основы программирования в Linux, автор: Нейл Мэтью. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x