Читаем QNX/UNIX: Анатомия параллелизма полностью

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

int pthread_condattr_destroy(pthread_condattr_t* attr);

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

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

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

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

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

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

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.

<p>Ожидание условия</p>Простое ожидание

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

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

Не следует использовать условную переменную с мьютексом, у которого разрешен рекурсивный захват.

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

EOK— успешное завершение ожидания либо ожидание прервано сигналом;

EAGAIN— недостаток системных ресурсов для реализации ожидания на условной переменной;

EFAULT— произошла ошибка при попытке обращения к указателям condили mutex;

EINVAL— возвращается в следующих ситуациях:

 • не инициализированы переменные, на которые указывают condили mutex;

 • попытка использования переменной, на которую указывает cond, для нескольких мьютексов;

 • вызвавший поток не владеет указанным мьютексом.

Ожидание с тайм-аутом

#include

int pthread_cond_timedwait(pthread_cond_t* cond,

 pthread_mutex_t* mutex, const struct timespec* abstime);

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

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

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

EOK— успешное завершение ожидания либо ожидание прервано сигналом;

EAGAIN— недостаток системных ресурсов для реализации ожидания на условной переменной;

EFAULT— произошла ошибка при попытке обращения к указателям condили mutex;

EINVAL— возвращается в следующих ситуациях:

 • не инициализированы переменные, на которые указывают condили mutex;

 • попытка использования переменной, на которую указывает cond, для нескольких мьютексов;

 • вызвавший поток не владеет указанным мьютексом.

ETIMEDOUT— завершение функции по наступлению времени, указанного в abstime.

<p>Выполнение условия</p>
Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных