Синхронизация и взаимодействие программных потоков в операционной среде реального времени. Дорогов А.Ю. - 34 стр.

UptoLike

Составители: 

34
ровать поток в данном состоянии. Этот прием можно использовать для ор-
ганизации программного опроса, периодически проверяя, выполнено ли ус-
ловие деблокировки. Если нет, то можно сделать что-то другое, но это не
очень хорошая практика. Следующий фрагмент программы демонстрирует
пример использования тайм-аута при ожидании завершения дочернего по-
тока.
include <sys/neutrino.h>
#define SEC_NSEC 1000000000LL // в 1 с содержится 1 000 000 000 нс
int main (void) // игнорировать аргументы
{
uint64_t timeout;
struct sigevent event;
int rval;
...
// следующая макрокоманда устанавливает event.sigev_notify = SIGEV_UNBLOCK:
SIGEV_UNBLOCK_INIT (&event);
timeout = 10LL * SEC_NSEC; // интервал тайм-аута равен 10 с
TimerTimeout (CLOCK_REALTIME, _NTO_TIMEOUT_JOIN,
&event, &timeout, NULL); // установить тайм-аут
rval = pthread_join (thread_id, NULL);
if (rval == ETIMEDOUT) {
printf ("Поток %d работает больше 10 с!\n", thread_id);
}
...
В этом фрагменте тайм-аут на ожидание завершения потока устанав-
ливается равным 10 с. Уведомление SIGEV_UNBLOCK устанавливается с
помощью макрокоманды. Если дочерний поток продолжает работать за
пределами установленной временной границы, то в родительском потоке
выполняется возврат из вызова pthread_join() с кодом ошибки ETIMEDOUT.
Следующий пример демонстрирует использование тайм-аута при об-
мене сообщениями.
event.sigev_notify = SIGEV_UNBLOCK; // прямая установка типа уведомления
timeout.tv_sec = 10;
timeout.tv_nsec = 0;
timer_timeout( CLOCK_REALTIME,
_NTO_TIMEOUT_SEND | _NTO_TIMEOUT_REPLY,
&event, &timeout, NULL );
MsgSendv( coid, NULL, 0, NULL, 0 );
...
Тайм-аут длительностью в 10 с устанавливается перед вызовом пере-
дачи сообщения и действует на SEND-блокированное и REPLY-
блокированное состояния передающего потока.
3. Механизмы взаимодействия программных потоков
Согласно стандарту POSIX основной формой взаимодействия про-
граммных потоков определена передача сообщений. Механизм обмена со-