Автор работы: Пользователь скрыл имя, 03 Апреля 2011 в 14:01, реферат
В компьютерных технологиях многозадачность – это метод, в котором различные задачи, также известные как процессы, делят общие ресурсы, такие как центральное обрабатывающее устройство (центральный процессор) , который является исполнителем машинных инструкций и отвечает за выполнение всевозможных операций, которые задаются программами.
1.Что такое многозадачность?....................................................стр.3
2.Основные принципы многозадачности в Windows………...стр.4
3.Синхронизация потоков……………………………………...стр.5
4.Windows NT как родоначальник многозадачности………...стр.10
5.NT и ее улучшенные версии…………………………………стр.11
Windows 95……………………………………………………………….стр.11
Windows 98……………………………………………………………….стр.12
Windows 2000…………………………………………………………….стр.12
Windows XP………………………………………………………………стр.13
Windows Vista…………………………………………………………….стр.14
6.Сходства и различия Windows 9x и Windows NT (2000, XP)..стр.15
7.Заключение ……………………………………………………стр.17
8.Список литературы……………………………………………стр.18
ный период времени или если завершилось выполнение фоновой операции вво-
да/вывода.
DWORD WaitForSingleObjectEx (
HANDLE
hObject,
DWORD
dwMilliseconds,
BOOL
bAlertable );
DWORD WaitForMultipleObjectsEx(
DWORD
dwNumObjects,
LPHANDLE
lpHandles,
BOOL
bWaitAll,
DWORD dwMilliseconds, // максимальный период ожидания
BOOL bAlertable );
При успешном выполнении
дался, обычно определенным образом изменяется. Например, если поток ожидал и по-
лучил сигнал от исключающего семафора, функция восстанавливает несигнальное со-
стояние исключающего семафора, чтобы остальные потоки знали о том, что он занят.
Кроме того, функции ожидания декрементируют значение счетчика семафора и сбрасы-
вают информацию о некоторых событиях.
Функции ожидания не изменяют состояния указанного объекта до тех пор, пока не
поступит сигнал от одного или нескольких других объектов. В частности, поток не за-
хватывает исключающий семафор сразу же после поступления сигнала от него, а ожида-
ет сигналов от других объектов. Кроме того, в течение времени ожидания исключающий
семафор снова может быть захвачен другим потоком, который еще больше продлит со-
стояние ожидания.
Конечно, ожидать поступления сигнала от объекта можно лишь в том случае, если
этот объект уже создан. Начнем с создания исключающих семафоров и семафоров, по-
скольку для работы с ними существуют параллельные API-команды, позволяющие соз-
давать и уничтожать эти объекты, захватывать их и освобождать, а также получать их
дескрипторы.
Функциям, создающим исключающие семафоры и семафоры, нужно указать тре-
буемые привилегии доступа и начальные параметры создаваемого объекта (можно также
указать его
имя, но это необязательно) [12].
HANDLE CreateMutex (
LPSECURITY_ATTRIBUTES lpsa, // необязательные атрибуты безопасности
BOOL
bInitialOwner
LPTSTR
lpszMutexName )
HANDLE CreateSemaphore(
LPSECURITY_ATTRIBUTES lpsa, //необязательные атрибуты безопасности
LONG
lInitialCount,
LONG
lMaxCount,
LPTSTR
lpszSemName );
// имя семафора (может иметь значение
NULL)
Если в качестве атрибута безопасности задано значение NULL, результирующий
дескриптор получит все привилегии доступа и не будет наследоваться дочерними про-
цессами. Имена объектов являются необязательными, однако они становятся полезными
в ситуации, когда несколько процессов управляют одним и тем же объектом.
Если флагу bInitialOwner присвоить значение TRUE, поток сразу после создания
объекта завладеет им. Созданный исключающий семафор не станет подавать сигналы до
тех пор, пока поток не освободит его.
В отличие от исключающего семафора, который может принадлежать только од-
ному потоку, неисключающий семафор остается в сигнальном состоянии до тех пор, по-
ка его счетчик захватов не получит значения iMaxCount. Если другие потоки в этот момент попытаются завладеть семафором, они будут приостановлены до тех пор, пока
счетчик захватов не будет декрементирован до значения ниже максимального.
Пока семафор (или исключающий семафор) существует, поток взаимодействует с
ним посредством операций захвата и освобождения. Для захвата любого объекта поток
вызывает функцию WaitForSingleObject (или одну из ее разновидностей). Завершив вы-
полнение задачи, которая синхронизировалась захваченным объектом, поток освобож-
дает этот объект
с помощью одной из следующих
функций:
BOOL ReleaseMutex( HANDLE hMutex
) ;
BOOL ReleaseSemaphore(
HANDLE hSemaphore,
LONG lRelease, // величина, на которую
LPLONG lplPrevious ); // переменная, которой присваивается
При освобождении семафора: или исключающего семафора значение счетчика за-
хватов инкрементируется. Значение счетчика, превышающее 0, воспринимается систе-
мой как сигнал объекта ожидающим его потокам.
Освободить
исключающий семафор может
Однако любой поток может вызвать функцию ReleaseSemaphore, которая инкрементиру-
ет значение счетчика захватов обычного семафора вплоть до его максимального значе-
ния. Изменение значения счетчика дает возможность в процессе выполнения программы
произвольным образом задать количество потоков, которые могут завладеть семафором.
Обратите внимание, что функция CreateSemaphore позволяет при создании нового сема-
фора присвоить его счетчику значение, меньшее максимального. Например, при разра-
ботке нового семафора его счетчику можно задать начальное значение 0. Такой прием
позволит заблокировать все потоки до тех пор, пока программа не произведет инициали-
зацию, а затем не увеличит значение счетчика с помощью команды ReleaseSemaphore.
Не забывайте вовремя освобождать синхронизирующие объекты. Не задав макси-
мального времени ожидания и забыв освободить исключающий семафор, вы заблоки-
руете все ожидающие его потоки.
Поток
может ожидать несколько
заблокированным, однако после завершения каждого из процессов ожидания необходи-
мо, выполнять операцию освобождения. Это требование справедливо для семафоров,
исключающих семафоров и критических разделов.
Событие
представляет собой объект, который
создается программой при
димости информировать потоки о выполнении определенных действий. В простейшем
случае (ручной сброс) событие переключает свое состояние с помощью команд SetEvent
(сигнал включен) и ResetEvent (сигнал выключен). Когда сигнал включается, его полу-
чают все потоки, которые ожидают появления соответствующего события. Если сигнал
выключается, все такие потоки блокируются. В отличие от семафоров и исключающих
семафоров, события данного типа изменяют свое состояние только при подаче соответ-
ствующей команды каким-нибудь потоком.
События
целесообразно использовать
только после того, как программа обновит свое окно или пользователь введет опреде-
ленную информацию . Ниже представлены основные функции, предназначенные для
работы с событиями:
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpsa, // привилегии доступа
BOOL bManualReset, // TRUE - событие должно быть
BOOL bInitialState,
LPTSTR lpszEventName ); //имя события (допускается
BOOL SetEvent ( HANDLE hEvent );
BOOL ResetEvent( HANDLE hEvent
);
При установке параметра
рое сразу же будет находиться в сигнальное состоянии. Функции SetEvent и ResetEvent в
случае успешного завершения возвращают значение TRUE, при возникновении ошибки
- значение FALSE.
Параметр bManualReset функции CreateEvent позволяет создать событие, сбрасы-
ваемое не вручную, а автоматически. Автоматически сбрасываемое событие переходит в
несигнальное состояние сразу же после выполнения функции SetEvent. Для таких собы-
тий функция ResetEvent является избыточной. Кроме того, перед автоматическим сбро-
сом по каждому сигналу событие освобождает только один поток. Автоматически сбра-
сываемые события
целесообразно применять в
поток подготавливает данные для других, вспомогательных потоков. При готовности
нового набора данных основной поток устанавливает событие, по которому освобожда-
ется один вспомогательный поток. Остальные вспомогательные потоки продолжают