Cтраница 1
Объекты синхронизации ( а также объекты файлов памяти, рассматриваемые далее) совместно используют одинаковые имена. Таким образом, если имя, передаваемое в функции: : create. [1]
Объектом синхронизации выступают предсказуемые денежные потоки, поддающиеся изменению во времени. В процессе синхронизации денежных потоков во времени используются два основных метода - выравнивание и повышение тесноты корреляционной связи между отдельными видами потоков. [2]
Одно из преимуществ использования объекта синхронизации состоит в том, что пока поток ждет освобождения объекта, он блокируется. При блокировании потока операционная система не выполняет его, следовательно, ему не нужно занимать процессорное время, которое можно использовать для других потоков. [3]
Из списка видно, что набор объектов синхронизации достаточно широк и разнообразен. Важность использования первых пяти объектов поясним на примере. Ожидание одним потоком завершения другого при помощи объекта событие слишком громоздко, к тому же установка соответствующего события перед завершением потока еще не означает, что поток завершился. [4]
Ожидающие функции, использующие семафор в качестве объекта синхронизации, уменьшают значение счетчика. Поток может последовательно запрашивать семафор, используя ожидающую функцию. Но использование функции WaitForMultipleObjects ( или подобной), у которой в качестве массива объектов задан массив дескрипторов одного и того же семафора, уменьшит значение счетчика последнего только на единицу. [5]
Вызов интерфейса Win32 WaitForMultipleObjects позволяет потоку блокироваться на множестве объектов синхронизации, чьи дексрипторы передаются этой функции в виде параметров. Вызывающий поток отпускается, как только один из этих объектов получает сигнал. Может ли набор объектов синхронизации включать в себя два семафора, один мыотекс и одну критическую область. [6]
При использовании мыотекса вызывается функция: rCreateMutex Win32 API для создания объекта синхронизации - мыотекса. [7]
![]() |
Объекты синхронизации Win32. [8] |
При вызове функций: : WaitForSingleObject или: : WaitForMultipleObject к ожиданию доступа к объектам синхронизации может добавиться ожидание доступа к объектам Windows других типов. В табл. 22.2 перечислены эти объекты. Для каждого из них приведены функции или переменные, с помощью которых можно получить дескриптор объекта и описание события, освобождающего объект. [9]
Вызывающий поток отпускается, как только один из этих объектов получает сигнал. Может ли набор объектов синхронизации включать в себя два семафора, один мьютекс и одну критическую область. [10]
Вспомните: при использовании объекта синхронизации нужно передавать его дескриптор соответствующей функции Win32 API. Но, как правило, дескриптор Windows, полученный процессом ( например, дескриптор мьютекса, полученный при вызове функции: : CreateMutex), не может использоваться другим процессом. [11]
Для синхронизации отдельных процессов используются мьютексы, семафоры или события. При этом каждый процесс получает собственный дескриптор объекта синхронизации. [12]
Данная функция по сути схожа с вышеперечисленными, за исключением того, что в качестве объекта синхронизации выступает сигнал от последовательного порта. [13]
Эти два метода использования дескрипторов менее удобны, чем вызовы функций: : Create. Однако эти методы применимы для совместного использования широкого набора дескрипторов различных типов, в частности - объектов синхронизации, потоков, процессов, каналов, объектов файлов памяти и любых других, созданных функцией Win32 API: : CreateFile. В системе Windows разным процессам нельзя совместно использовать дескрипторы следующих объектов: выделенной памяти, графических объектов и окон. Эти объекты всегда остаются собственностью процесса. [14]
Процесс также может получить дескриптор другого процесса ( даже если он не создает его), вызывая функцию Win32: : OpenProcess. В этом случае в функцию: rOpenProcess нужно передать идентификатор процесса, а не имя ( в отличие от объектов синхронизации процессам нельзя задавать имя), как в следующем примере. [15]