Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Тайм-ауты ядра и функция pthreadjoin()



Читайте также:
  1. IV. Перепишите и переведите предложения, обращая внимание на употребление герундия в разных функциях.
  2. IV. Перепишите и переведите предложения, обращая внимание на употребление герундия в разных функциях.
  3. X. Прочитайте и переведите предложения, обращая внимание на употребление инфинитива в различных функциях.
  4. XIV. Прочитайте и переведите предложения, обращая внимание на употребление Participle I в разных функциях.
  5. XV. Прочитайте и переведите предложения, обращая внимание на употребление Participle II в разных функциях.
  6. Бала кездегі қалқанша бездің гипофункциялық көріністері
  7. В.7. Производная функции комплексного переменного. Геометрический смысл аргумента и модуля производной. Условия Коши – Римана. Аналитическая функция.

 

Самый простой пример для рассмотрения — это использование тайм-аута с функцией pthreadjoin().

 

Применим макроопределение SIGEV_UNBLOCK_INIT() для инициализации структуры события, но можно было установить sigev_notify в SIGEV_UNBLOCK и «вручную». Можно было даже сделать еще более изящно, передав NULL вместо struct sigevent — функция TimerTimeout() понимает это как знак того, что нужно использовать SIGEV_UNBLOCK.

 

Если поток (заданный, в thread_id) остается работающим более 10 секунд, то системный вызов завершится по тайм-ауту — функция pthreadjoin () возвратится с ошибкой, установив errno в ETIMEDOUT.

Вы можете использовать и другую «стенографию», указав NULL в качестве значения тайм-аута (параметр ntime в декларации выше), что предпишет ядру не блокироваться в данном состоянии. Этот прием можно использовать для организации программного опроса. (Хоть программный опрос и считается дурным тоном, его можно весьма эффективно использовать в случае с pthreadjoin(), периодически проверяя, завершился ли нужный поток. Если нет, можно пока сделать что-нибудь другое.)

Ниже представлен пример программы, в которой демонстрируется неблокирующий вызов pthreadJoin():

 

int

pthread_join_nb (int tid, void **rval)

{

TimerTimeout (CLOCK_REALTIME, _NTO_TIMEOUT_JOIN, NULL, NULL, NULL);

return (pthread_join (tid, rval));)


Дата добавления: 2015-07-11; просмотров: 166 | Нарушение авторских прав






mybiblioteka.su - 2015-2024 год. (0.006 сек.)