Что такое функционирование в «Реальном масштабе времени»


§6.  Лабораторная работа № 6 «Синхронизация процессов


Download 1.86 Mb.
Pdf ko'rish
bet66/72
Sana19.04.2023
Hajmi1.86 Mb.
#1362511
TuriУчебное пособие
1   ...   62   63   64   65   66   67   68   69   ...   72
Bog'liq
Луканов А.С. Системы реального времени 2020

§6. 
Лабораторная работа № 6 «Синхронизация процессов. 
Барьеры» 
 
6.1. 
Теория 
 
Применение барьера 


140 
Два метода синхронизации: один метод с применением 
функции pthrea. dJoin(), который мы только что рассмотрели, и 
метод с применением барьера. 
Основной поток должен дождаться того момента, когда все 
рабочие потоки завершат работу, и только затем можно начинать 
следующую часть программы. 
Однако с применением функции pthreadJoin () мы ожидаем 
завершения потоков. Это означает, что на момент ее 
разблокирования потоков нет больше с нами; они закончили работу 
и завершились. 
В случае с барьером мы ждем «встречи» определенного числа 
потоков у барьера. Когда заданное число потоков достигнуто, мы их 
все разблокируем (заметьте, что потоки при этом продолжат 
выполнять свою работу). 
Сначала барьер следует создать при помощи функции 
barrier_init0:
#include  
int 
barrier_init (barrier t *barrier, 
const barrier attr t *attr, 
int count) ;
Эта функция создает объект типа «барьер» по переданному ей 
адресу (указатель на барьер хранится в параметре barrier) и 
назначает ему атрибуты, которые определены в attr (мы будем 
использовать NULL, чтобы установить значения по умолчанию). 
Число потоков, которые должны вызывать функцию barrier_wait(), 
передается в параметре count. 
После того как барьер создан, каждый из потоков должен 
будет вызвать функцию barrier_wait(), чтобы сообщить, что он 
отработал: 
#include  
int barrier_wait (barrier t *barrier) ; 


141 
После того как поток вызвал barrier_wait(), он будет 
блокирован до тех пор, пока число потоков, указанное 
первоначально в параметре count функции barrier_mit(), не вызовет 
функцию barrier'_waU() (они также будут блокированы). После того 
как нужное число потоков выполнит вызов функции barrier_wait(), 
все эти потоки будут разблокированы «одновременно». 

Download 1.86 Mb.

Do'stlaringiz bilan baham:
1   ...   62   63   64   65   66   67   68   69   ...   72




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling