Анотація: Для коректної взаємодії процесів недостатньо одних організаційних зусиль операційної системи. Необхідні певні внутрішні зміни в поведінці процесів. У цій лекції розглядаються питання, пов'язані з такими змінами, наводяться програмні алгоритми коректної організації взаємодії процесів.
У попередній лекції ми говорили про зовнішні проблеми кооперації, пов'язаних з організацією взаємодії процесів з боку операційної системи. Припустимо, що надійний зв'язок процесів організована, і вони вміють обмінюватися інформацією. Чи потрібно нам робити ще які-небудь дії для організації правильного рішення задачі взаємодіючими процесами? Чи потрібно змінювати їх внутрішнє поведінку? Роз'яснення цих питань і присвячена дана лекція.
Interleaving, race condition і взаємовиключення
Давайте тимчасово відвернемося від операційних систем, процесів і ниток виконання і поговоримо про деякі "активностях". Під активностями ми будемо розуміти послідовне виконання ряду дій, спрямованих на досягнення певної мети. Активності можуть мати місце в програмному і технічному забезпеченні, в звичайної діяльності людей і тварин. Ми будемо розбивати активності на деякі неподільні, або атомарні. операції. Наприклад, активність "приготування бутерброда" можна розбити на наступні атомарні операції:
- Відрізати шматок хліба.
- Відрізати шматочок ковбаси.
- Намазати шматок хліба маслом.
- Покласти скибочку ковбаси на підготовлений шматок хліба.
Неподільні операції можуть мати внутрішні невидимі дії (взяти батон хліба в ліву руку, взяти ніж в праву руку, провести відрізання). Ми ж називаємо їх неподільними тому, що вважаємо виконуваними за раз, без переривання діяльності.
Нехай є дві активності