Олег Цилюрик - QNX/UNIX - Анатомия параллелизма

Здесь есть возможность читать онлайн «Олег Цилюрик - QNX/UNIX - Анатомия параллелизма» — ознакомительный отрывок электронной книги совершенно бесплатно, а после прочтения отрывка купить полную версию. В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Санкт-Петербург, Год выпуска: 2006, ISBN: 2006, Издательство: Символ-Плюс, Жанр: Программирование, ОС и Сети, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

QNX/UNIX: Анатомия параллелизма: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «QNX/UNIX: Анатомия параллелизма»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Книга адресована программистам, работающим в самых разнообразных ОС UNIX. Авторы предлагают шире взглянуть на возможности параллельной организации вычислительного процесса в традиционном программировании. Особый акцент делается на потоках (threads), а именно на тех возможностях и сложностях, которые были привнесены в технику параллельных вычислений этой относительно новой парадигмой программирования. На примерах реальных кодов показываются приемы и преимущества параллельной организации вычислительного процесса. Некоторые из результатов испытаний тестовых примеров будут большим сюрпризом даже для самых бывалых программистов. Тем не менее излагаемые техники вполне доступны и начинающим программистам: для изучения материала требуется базовое знание языка программирования C/C++ и некоторое понимание «устройства» современных многозадачных ОС UNIX.
В качестве «испытательной площадки» для тестовых фрагментов выбрана ОСРВ QNX, что позволило с единой точки зрения взглянуть как на специфические механизмы микроядерной архитектуры QNX, так и на универсальные механизмы POSIX. В этом качестве книга может быть интересна и тем, кто не использует (и не планирует никогда использовать) ОС QNX: программистам в Linux, FreeBSD, NetBSD, Solaris и других традиционных ОС UNIX.

QNX/UNIX: Анатомия параллелизма — читать онлайн ознакомительный отрывок

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «QNX/UNIX: Анатомия параллелизма», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Операции над условной переменной

Параметры условной переменной

Инициализация параметров

int pthread_condattr_init(pthread_condattr_t* attr);

Функция инициализирует структуру атрибутов условной переменной, на которую указывает параметр attr. Структура данных pthread_condattr_tопределена в файле и является производной от типа syncattr_t, описанного в разделе «Параметры мьютекса». При инициализации атрибуты устанавливаются в значения по умолчанию.

Возвращаемые значения:

EOK— успешное завершение;

ENOMEM— недостаточно памяти для инициализации атрибутов условной переменной attr.

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

Параметр доступа

int pthread_condattr_setpshared(

pthread_condattr_t* attr, int pshared);

int pthread_condattr_getpshared(

const pthread_condattr_t* attr, int* pshared);

Функции устанавливают/считывают, возможен ли доступ к условной переменной из потоков, порожденных в других процессах. Параметр psharedможет принимать следующие значения:

PTHREAD_PROCESS_SHARED— любой поток, имеющий доступ к области памяти, в которой расположена условная переменная, может ее использовать.

PTHREAD_PROCESS_PRIVATE(значение по умолчанию) — только поток, созданный в контексте того же процесса, в котором находится условная переменная, может ее использовать. Если поток из другого процесса попытается использовать условную переменную, созданную с параметром PTHREAD_PROCESS_PRIVATE, результат будет не определен.

Возвращаемые значения:

EOK— успешное завершение;

EINVAL— атрибуты условной переменной, на которые указывает attr, или новое значение, на которое ссылается pshared, не определены.

Параметры тайм-аута

int pthread_condattr_setclock(

pthread_condattr_t* attr, clockid_t id);

int pthread_condattr_getclock(

const pthread_condattr_t* attr, clockid_t* id);

Функции устанавливают/считывают, каким способом (т.e. на основании какого счетчика) вычисляется значение тайм-аута при вызовах pthread_cond_timedwait(). Этот параметр в QNX Neutrino 6.2 не является обязательным и введен в соответствии со стандартом POSIX 1003.1j (draft). На практике можно устанавливать только значение REALTIME_CLOCKв качестве параметра id;это же значение является значением по умолчанию.

Возвращаемые значения:

EOK— успешное завершение;

EINVAL— неверный аргумент attr.

Разрушение блока параметров

int pthread_condattr_destroy(pthread_condattr_t* attr);

Функция разрушает блок параметров условной переменной, на которые указывает attr, после чего он уже не может использоваться без повторной инициализации.

На практике разрушение параметров объекта синхронизации не имеет особого смысла. Вы всегда можете переопределить атрибуты, содержащиеся в переменной attr, для инициализации других условных переменных.

Возвращаемые значения:

EOK— успешное завершение;

EINVAL— неверный аргумент attr.

Инициализация условной переменной

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

int pthread_cond_init(pthread_cond_t* cond, pthread_condattr_t* attr);

Инициализирует условную переменную condсо значениями, установленными атрибутами attr. Вместо прямого вызова функции pthread_cond_init()для начальной инициализации статических условных переменных (глобальных на уровне файла кода или пространства имен namespaceлибо явно описанных с квалификатором static) можно воспользоваться макросом PTHREAD_COND_INITIALIZER.

Возвращаемые значения:

EOK— успешное завершение;

EAGAIN— нет свободных системных объектов синхронизации;

EBUSY— переменная condуже инициализирована и не разрушалась;

EFAULT— ошибка доступа ядра к объектам condили attr;

EINVAL— неправильное значение переменной cond.

Ожидание условия

Простое ожидание

int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);

Вызов функции блокирует вызвавший поток на условной переменной condи разблокирует мьютекс mutex. Поток блокируется до тех пор, пока другой поток не вызовет функцию разблокирования на условной переменной cond( pthread_cond_signal()или pthread_cond_broadcast()). Мьютекс mutexдолжен быть захвачен потоком до вызова функции. Поток, блокированный на условной переменной, может быть разблокирован также приходом сигнала или вызовом завершения потока. В любом случае при разблокировании потока и выходе из функции ожидания поток вновь захватывает мьютекс mutex.

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

Интервал:

Закладка:

Сделать

Похожие книги на «QNX/UNIX: Анатомия параллелизма»

Представляем Вашему вниманию похожие книги на «QNX/UNIX: Анатомия параллелизма» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «QNX/UNIX: Анатомия параллелизма»

Обсуждение, отзывы о книге «QNX/UNIX: Анатомия параллелизма» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x