Cтраница 2
Механизм синхронизации, реализованный в Windows, достаточно прост и гибок в использовании, требует минимальных затрат ресурсов вычислительной системы и совершенно необходим в работе. Механизм синхронизации включает в себя критические секции, защищенный доступ к переменным, набор ожидающих ( блокирующих) функций, объекты синхронизации, асинхронный ввод / вывод. [16]
Вызов интерфейса Win32 WaitForMultipleObjects позволяет потоку блокироваться на множестве объектов синхронизации, чьи дексрипторы передаются этой функции в виде параметров. Вызывающий поток отпускается, как только один из этих объектов получает сигнал. Может ли набор объектов синхронизации включать в себя два семафора, один мыотекс и одну критическую область. [17]
Так как собственно выполняются не процессы, а потоки, есть смысл говорить лишь о взаимодействии и синхронизации именно потоков, принадлежащих как одному процессу, так и разным. Только в одном случае можно упомянуть о взаимодействии именно процессов - когда один процесс ожидает завершения другого. При этом дескриптор процесса является объектом синхронизации, о чем будет подробно рассказано ниже. [18]
Можно ждать, пока один из них станет свободным либо пока все объекты станут свободными. WaitForSingleObject и: : WaitForMultipleObject - Общие функции, ожидающие любой из объектов синхронизации. [19]
Взаимоисключения, события и семафоры могут быть как безымянными, так и поименованными. Первые служат для синхронизации потоков одного процесса, вторые - для синхронизации потоков различных процессов. В качестве имени используется строка символов. Доступ к поименованному объекту синхронизации из другого процесса осуществляется только по имени, другого способа ( например, по дескриптору) не существует. [20]
Узнаете, как осуществляется запуск нового процесса из программы, а также как управлять процессом и ожидать его завершения. Увидите, как используются объекты синхронизации для координации работы потоков внутри отдельных процессов и дескрипторы разных процессов Windows при их совместном применении. Узнаете, как используются два механизма обмена данными между процессами: каналов ( pipes) и общей памяти. [21]
Другие объекты синхронизации могут совместно использоваться отдельными процессами. Семафоры похожи на мьютексы с той лишь разницей, что допускают одновременный доступ к ресурсам нескольких потоков. При создании семафора указывается максимальное число допустимых потоков. Событие - это многофункциональный объект синхронизации, который позволяет одному потоку передавать сигналы одному или нескольким потокам. В табл. 22.1 перечислены объекты синхронизации Win32, кратко описано назначение каждого из них и приведены функции Win32 API, использующиеся для создания и управления объектом. [22]
При вызове последней функции происходит следующее. Как правило, вновь созданный мьютекс свободен. Если при вызове потоком функции: : WaitForSingieObject мьютекс свободен, то функция переводит мьютекс в занятое состояние и сразу же возвращается обратно. Поток продолжает выполнять защищенный блок, после чего вызывает функцию: : ReleaseMutex и устанавливает мьютекс снова в свободное состояние. Если мьютекс занят при вызове функции: : WaitForSingleObject ( другой поток в это время выполняется в защищенном блоке), то эта функция сначала ждет, когда мьютекс станет свободным, а затем устанавливает мьютекс в занятое состояние и возвращается. В результате только один поток может выполнять защищенный блок кода в один момент времени. Когда объект синхронизации занят, считается, что он принадлежит потоку, который перевел его в занятое состояние. [23]
Другие объекты синхронизации могут совместно использоваться отдельными процессами. Семафоры похожи на мьютексы с той лишь разницей, что допускают одновременный доступ к ресурсам нескольких потоков. При создании семафора указывается максимальное число допустимых потоков. Событие - это многофункциональный объект синхронизации, который позволяет одному потоку передавать сигналы одному или нескольким потокам. В табл. 22.1 перечислены объекты синхронизации Win32, кратко описано назначение каждого из них и приведены функции Win32 API, использующиеся для создания и управления объектом. [24]