Операционная система OS2 Warp

Синхронизация задач


При использовании параллельно работающих задач возникает проблема синхронизации их выполнения.

Изменим немного программу, показанную на рис. 1.4. С помощью гипотетической функции Start запустим подпрограммы PlayMusic и Calculate как задачи в рамках одного процесса (рис. 1.5). Мы постараемся составить программу так, чтобы одновременно с вычислениями она делала что-нибудь еще, например, играла музыку.

Рис. 1.5. Запуск двух задач, первая из которых играет музыку, а вторая выполняет длительные вычисления

Теперь после получения данных одновременно выполняется проигрывание музыки и сложный расчет. Но вот вопрос - что сделает функция Start, после того как будет запущена задача, имя которой передается ей в качестве параметра?

Если составить эту функцию таким образом, чтобы она дожидалась завершения выполнения запускаемой ей задачи, то пользователь вначале прослушает музыкальное произведение, а затем компьютер приступит к многочасовому расчету. После завершения расчета начнется печать. То есть все осталось, как и раньше.

Если же функция Start вернет управление сразу после запуска задачи, то вначале заиграет музыка, а потом на фоне музыки будет запущен расчет. Но тут нас поджидает другая неприятность - сразу после запуска расчета принтер начнет печать, не дожидаясь, пока задача Calculate подготовит необходимые для этого данные.

Операционная система IBM OS/2 допускает оба варианта запуска задач, обеспечивая дополнительно такие средства синхронизации задач, как критические секции и семафоры.



Содержание раздела