Page 115 - 6571
P. 115

Лістинг  18  –  Виробники  та  споживачі,  що  використовують
            спільні двійкові семафори
                  typeT buf; /* буфер типу T */
                  sem empty = 1, full = 0;
                  process Producer[і = 1 to M] {
                    while (true) {
                      ...

                      /* створити дані та помістити їх в буфер */
                      P(empty);
                      buf = data;
                      V(full);
                    }
                  }
                  process Consumer[j = 1 to N] {
                    while (true) {
                      /* отримати результат та обробити його */
                      P(full);
                      result = buf;
                      V(empty);
                    }
                  }

                  Рішення  задачі  про  виробників  і  споживачів  подане  в

            лістингу 18 ілюструє застосування спільних двійкових семафорів.
            Кожен  процес-виробник  Producer  по  черзі  виконує  операції
            P(empty)  та  V(full),  а  кожен  процес-споживач  Consumer  –

            операції P(full) та V(empty).
                  4.  Задача  кільцевих  буферів  (облік  ресурсів).  В  останньому
            прикладі продемонстровано синхронний доступ до одного буфе-

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

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

            продуктивність програми, зменшуючи число блокувань процесів.
            Даний  випадок  є  прикладом  класичного  компромісу  між  часом
            обчислень і об’ємом пам’яті.

                  Розглянемо  рішення  задачі  про  кільцевий  буфер,  який
            використовується  в  якості  багатоелементного  комунікаційного

                                                        114
   110   111   112   113   114   115   116   117   118   119   120