Реализовать свободный от тупиков вариант производителя / потребителя с ограниченным буфером, используя jBACI (C - -) - PullRequest
0 голосов
/ 04 октября 2018

1.- В этом назначении вы будете реализовывать свободный от тупиков вариант производителя / потребителя с ограниченным буфером, используя jBACI (C - -).C- - это подмножество C ++, которое позволяет вам объявлять семафоры и применять операции P и V.

В стандартном решении с одним производителем и одним потребителем вам понадобится как минимум три семафора с именем:Полное →, чтобы остановить производитель от создания элементов, когда буфер заполнен.(начальное значение n = размер буфера) Пусто →, чтобы запретить потребителю потреблять элементы из буфера, когда буфер пуст (начальное значение ноль) Mutex → разрешить только один процесс в критическом разделе (начальное значение один)

В этом домашнем задании вы реализуете ограниченный буфер производитель / потребитель, будет один производитель (P), один потребитель (C) и один буфер;размер буфера равен 5. Производитель произведет 20 элементов и прекратит работу.
Потребитель будет потреблять элементы из буфера, пока не будут использованы 20 элементов

Направление проекта Вы будете писать программу на основена переводчике BACI.Загрузите исполняемые файлы jBACI, файлы примеров и документацию из папки JBACI на веб-курсах.Папка JBACI в Webcourses рассказывает, как загрузить и установить jBACI на ваш компьютер.

BACI поддерживает программирование C--, которое является подмножеством C ++, расширенным примитивами для синхронизации процессов (семафоры и мониторы).

Пример программы в BACI:

line pc
1 0 // example of C-- semaphore usage
2 0
3 0 semaphore count; // a "general" semaphore
4 0 binarysem output; // a binary (0 or 1) semaphore for unscrambling output
5 0
6 0 void increment()
7 0 {
8 0 p(output); // obtain exclusive access to standard output
9 2 cout << "before v(count) value of count is " << count << endl;
10 6 v(output);
11 8 v(count); // increment the semaphore
12 10 } // increment
13 11
14 11 void decrement()
15 11 {
16 11 p(output); // obtain exclusive access to standard output
17 13 cout << "before p(count) value of count is " << count << endl;
18 17 v(output);
19 19 p(count); // decrement the semaphore (or stop -- see manual text)
20 21 } // decrement
21 22
22 22 main()
23 23 {
24 23 initialsem(count,0);
25 26 initialsem(output,1);
26 29 cobegin {
27 30 decrement(); increment();
28 36 }
29 37 } // main

Проверка вашего решения

Вы должны запустить и протестировать свое решение для двух случаев, как описано ниже, а также сравнить и прокомментировать полученные результаты.по каждому тесту: протестируйте свое первое решение. Введите задержку потребителю и протестируйте свое решение.Задержка по времени может быть реализована с использованием фиктивного цикла, который повторяется, например, 1000 раз

...