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

Применение барьера



Читайте также:
  1. Алгоритм действий при применение грелок для согревания недоношенного новорожденного.
  2. Алюминий: физические свойства, получение, применение, история
  3. Б20. 1.Применение физической силы
  4. Б4. 1.Применение методов правового регулирования к отношениям в сфере таможенного дела
  5. Виды форзацев и их применение в переплетах
  6. Вопрос 59. Понятие, значение, виды сроков исковой давности. Применение исковой давности.
  7. Выписка, хранение и применение лекарственных средств

 

Два метода синхронизации: один метод с применением функции pthreadJoin(), который мы только что рассмотрели, и метод с применением барьера.

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

Однако, с применением функции pthreadJoin() мы ожидаем завершения потоков. Это означает, что на момент ее разблокирования потоков нет больше с нами; они закончили работу и завершились.

В случае с барьером, мы ждем «встречи» определенного числа потоков у барьера. Когда заданное число потоков достигнуто, мы их все разблокируем (заметьте, что потоки при этом продолжат выполнять свою работу).

Сначала барьер следует создать при помощи функции barrier_init0:

 

 

#include <sync.h>

int

barrier_init (barrier t *barrier,

const barrier attr t *attr,

int count);

 

Эта функция создает объект типа «барьер» по переданному ей адресу (указатель на барьер хранится в параметре barrier ) и назначает ему атрибуты, которые определены в attr (мы будем использовать NULL, чтобы установить значения по умолчанию). Число потоков, которые должны вызывать функцию barrier_wait(), передается в параметре count.

После того как барьер создан, каждый из потоков должен будет вызвать функцию barrier_wait(), чтобы сообщить, что он отработал:

 

#include <sync.h>

int barrier_wait (barrier t *barrier);

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


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






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