Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы СПЗ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
113.15 Кб
Скачать

11. Синхронизация по отношению к моменту завершения потока.

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

#include<pthread.h>

int

pthread_join(pthread_t*thread,

void**value_ptr);

1_й идентификатор потока к которому хотим присоединиться.

2_й не обязательный идентификатор,возвращант нужные значения.

  1. Барьеры

Барьер (barrier) - примитив синхронизации, применяемый главным образом в вычислительных задачах MPI/OpenMP. Существуют также примеры его применения в других задачах, но как правило это также задачи вычислительного характера. При создании барьера необходимо указать количество нитей N, необходимое для перехода через барьер. Нити, подходящие к барьеру, вызывают функцию pthread_barrier_wait(3C). Если количество нитей, ожидающих возле барьера, меньше N-1, нить блокируется. Когда набирается N нитей, все они разблокируются и продолжают исполнение.

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

Этапы:

создается барьер

#include<sync.h>

int

barrien_init(barrier_t*barrier,

const barrier attr_t*attr,

int count);

1-й переданный адрес, по которому создается барьер.

2-й аттрибуты 0.

3-й количество потоков которые должны вызвать функцию init barrier_wait(barrier_t*barrier).

  1. Блокировки чтения записи

Int Pthread rwloc init(pthread rwlock + lock,const pthread _rwlock attr_t +attr);

После использования блокировки её необходимо уничтожить.

Int thread_rwloc_destroy(pthread_rwlock+lock,const pthread_rwlockattr_t*attr);

Выбор блокировки необходимого типа:

-pthread_rwlock wrlock(. )-чтение;

-pthread_rwlock_ur look(.. )-записи.

  1. Клиент-серверные модели QNX

В QNX все взаимодействия между программными модулями организованы по типу клиент-сервер.

Здесь необходимо различать состояния клиента и сервера.

Клиент :

Сервер:

Состояние потока или приложения можно определить с помощью такой команды Pidin.

Обмен сообщениями в QNX реализован в библиотеке Се и может использоваться неявно.

Пример:

Программа которая обменивается сообщениями

#include <fcntl.h>

#include<unistd.h>

Int

Main(void

{

Int fd;

Fd_open (“filename ”, wronly );

Write(fd “это обмен сообщениями .\h”,24);

Close(fd);

Return(…);

}

Open() передача сообщений “open”

Write() передача сообщений ”write”

Close() передача сообщений”close”

  1. Неявный обмен сообщения в qnx(open, close)

  1. Привилегии обмена сообщениями. Установление соединения

Функции на стороне клиента в первую очередь клиент устанавливает с сервером соединение.

#incluse<sys/neutrino.h>

Int connect attaxch(int nd,

Pid_t pid,

Int chit,

Unsigned index,

Int flags);

Nd-номер узла

Pid-идентификатор класса

Chid-идентификатор к-ла

Последнее 2 параметра принимают нулевое значение .

В последней передаче сообщений соединение необходимо уничтожить функция :

Connect Detach()

Передача сообщения со стороны клиента

Int msg_send(int void,

Const void+smsg,

Int slytes,

Void rmsg,

Int rlytes.)