Page 81 - 6571
P. 81

вони мають значення «хиба». Зайвих затримок також немає, оскі-
            льки  один  процес  блокується,  тільки  якщо  інший  перебуває  в
            критичній  секції,  тому  небажаних  затримок  під  час  виконання
            програми не виникає.

                  Лістинг 3 – Задача критичної секції (крупномодульне рішення)
                  bool in1 = false, in2 = false;

                  process CS1 {
                    while (true) {
                      <await (!in2) in1 = true;> /* вхід */
                        критична секція;
                      in1 = false;/* вихід */
                      некритична секція;
                    }
                  }
                  process CS2 {
                    while (true) {
                      <await (!in1) in2 = true;> /* вхід */
                        критична секція;
                      in2 = false;/* вихід */
                      некритична секція;
                    }
                  }


                  10.2 Активні блокування у задачі критичної секції



                  У крупномодульному рішенні, наведеному в лістингу 3, ви-
            користовуються дві змінні. При узагальненні даного рішення для
            n процесів знадобиться n змінних. Однак існує тільки два цікавих
            для  нас  стани:  1)  деякий  процес  знаходиться  у  своїй  критичній
            секції; 2) усі процеси знаходяться поза межами критичної секції.

            Незалежно  від  числа  процесів,  для  того  щоб  розрізнити  ці  два
            стани, достатньо однієї змінної.
                  Нехай  lock  –  логічна  змінна,  яка  показує,  чи  знаходиться
            процес  в  критичній  секції,  тобто  lock  має  значення  «істина»,
            якщо одна з змінних in1 або in2має значення «істина», в іншому

            випадку lock має значення «хиба». Таким чином, отримаємо на-
            ступну умову:

                  lock == (in1 Úin2)







                                                        80
   76   77   78   79   80   81   82   83   84   85   86