Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpora_1-10_bez_vosmogo1 (1).docx
Скачиваний:
4
Добавлен:
16.04.2019
Размер:
133.72 Кб
Скачать

48.Синхронізація потоків. Критична секція.

InterLock функции позволяют в монопольном режиме выполнить только элементарные операции. Если необходимо выполнить группу операций в монопольном режиме, эти операции объединяются в критическую секцию. Критической секцией называют участки потоковых функций, которые нельзя прервать для выполнения такой же критической секции других потоковых функций данного процесса. В потоковой функции можно использовать несколько критических секций. С каждой критической секцией связывается ресурс, доступ к которому защищает эта критическая секция, например, в качестве ресурса можно использовать файл, одновременный доступ к которому запрещен. Запрет на одновременное исполнение распространяется только для данной критической секции.

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

1. выделить память под крит. секцию так, что б её структура была доступна для всех потоковых функций, использующих её.

2. До создания потоков, использующих крит. секцию, нужно инициализировать её (функция InitializeCriticalSection);

3. Пределить начало критического участка потоковой функции с помощью функции EnterCriticalSection;

4. Определить конец крит. секции участка потоковой функции с помощью функции LeaveCriticalSection;

5. в основном потоке, удалить крит. секцию. когда она больше не нужна (deletecriticalSection);

49. Синхронізація потоків. Функції очікування.

Для каждого объекта ядра, в том числе File, Process, Thread

объектов синхронизации задаются состояние этого объекта (свободный или занятый) и список потоков, которые ждут освобождения этого объекта, если объект занят. Таким образом, ОС легко может определить, какие потоки зависят от данного объекта.

Каждый заблокированный поток имеет список объектов, которые должны освободиться для продолжения его работы. При освобождении объекта ОС корректирует его состояние. Выбирается очередной поток, ждущий данный объект. Если этот поток не зависит от других объектов, его состояние изменяется. Если это поток с динамическим приоритетом, устанавлявливается новое значение приоритета. Если исполняемый в данный момент поток имеет приоритет меньший, чем приоритет нового, исполняемый поток заменяется новым. В противном случае нрвый поток переводится в состояние «Готов» и ставится в очередь готовых потоков.

1. Функция WaitForSingleObject:

DWORD WaitForSingleObject (

HANDLE hHandle, //дескриптор объекта ядра,

DWORD dwMilliseconds // интервал времени в миллисекундах, в

//течение которого необходимо ждать

//освобождения заданного объекта.);

Возвращаемое значение:

WAIT_OBJECT_0— функция завершена, так как заданный объект перешел в состояние «Свободен»;

WAIT_TlMEOUT - функция завершена, так как истек заданный интервал времени.

2. Функция WaitForMultipleObjects.

DWORD WaitForMultipleObjects (

DWORD nCount, // количество дескрипторов, состояние

//которых проверяется

CONST HANDLE *IpHandles, // массив дескрипторов

BOOL bWaіtAll //флаг ожидания

DWORD dwMilliseconds // интервал времени в миллисекундах, в

//течение которого необходимо ждать

//освобождения заданных объкта);

Возвращаемое значение:

WAIT_OBJECT_0, WAIT_OBJECT_1, ... — ф у н к ц и я завершена так как объект с заданным номером перешел в состояние "Свободен" (если bWaitAll = FALSE);

WAIT TIMEOUT— функция завершена, так как истек заданный интервал времени.

Объекты синхронизации устанавливают и используют свободное состояние, которое учитывается функциями ожидания.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]