Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые обзорные » Синхронізація потоків споживачів

Реферат Синхронізація потоків споживачів





зпечує ексклюзивний доступ до буфера. Коли мінлива позитивна, це вказує число елементів у буфері, коли вона негативна, це вказує число споживчих потоків в черзі. p align="justify"> Мінлива event є локальної змінної, яка в даному контексті означає, що кожен потік має свою версію.

Досі ми припускали, що у всіх потоків є доступ до всіх змінним, але ми призначимо змінну до кожного потоку.

Є кілька способів, як це може бути реалізовано в різних умовах.

Якщо кожен потік має свій власний стек часу виконання, то будь-які змінні, що знаходяться в стеку, є змінними конкретного потоку.

Якщо потоки представлені як об'єкти, ми можемо додати атрибут до кожного об'єкту потоку

Якщо потоки мають унікальні ідентифікатори, ми можемо використовувати ідентифікатори в якості індексу масиву або хеш-таблиці, і зберігати там дані для кожного потоку. У більшості програми змінні є локальними, проте в нашому випадку змінні будуть загальними, якщо вони явно не обвялени як локальні. br/>

. Рішення проблеми виробника споживача


Код розв'язку:


1 event = waitForEvent ()

mutex.wait ()

buffer.add (event)

items.signal ()

mutex.signal ()


Лістинг. 4 Рішення виробника

Виробник не повинен отримати ексклюзивний доступ до буфера, поки не відбудеться подія. Кілька потоків можуть виконати waitForEvent одночасно. Items семафори відстежують число елементів у буфері. Кожен раз, коли виробник додає елемент, він сигналізує items, поступово збільшуючи його на один. p align="justify"> Код споживача аналогічний.


1 items.wait ()

2 mutex.wait ()

event = buffer.get ()

mutex.signal ()

event.process ()


Лістинг. 5 Рішення споживача

Буферні операції захищені м'ютексів, але перш ніж споживач добереться до нього, він повинен зменшити items. Якщо items дорівнює нулю або негативний, споживач блокується, поки виробник не подасть сигнал. p align="justify"> Хоча це рішення правильне, є можливість внести в нього невелике поліпшення. Уявімо собі, що по украй мірі один споживач стоїть у черзі, коли виробник сигналізує items. Якщо диспетчер дозволить працювати споживачеві, що відбудеться далі? Відбудеться негайна блокування м'ютексів, який поки ще захоплений виробником. p align="justify"> Блокування та активація є середньо витратними операціями, їх зайве виконання може погіршити якість програми. Таким чином, ймовірно, було б краще перебудувати виробника ось так:


event = waitForEvent ()

mute...


Назад | сторінка 2 з 7 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Як бути, якщо контрагент за договором - нерезидент?
  • Реферат на тему: Event Marketing in Red Bull GmbH
  • Реферат на тему: Event-менеджмент: виявлення та аналіз інформаційних ресурсів
  • Реферат на тему: Event-маркетинг як інструмент маркетингових комунікацій (на прикладі ТОВ &А ...
  • Реферат на тему: Event-маркетинг як інструмент маркетингових комунікацій на прикладі ТОВ &Ар ...