Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Поток простоя
Если нет ни одного потока готового к выполнению, то Windows запускает поток простоя. Поток простоя в цикле проверяет не появился ли готовый поток. Поток простоя не имеет приоритета и работает только в том случае, когда нет ни одного готового к выполнению потока.
13. Синхронизация процессов и потоков. Объекты синхронизации. Синхронизация процессов потоков — приведение двух или нескольких процессов или потоков к такому их протеканию, когда определённые стадии разных процессов совершаются в определённом порядке, либо одновременно. Синхронизация необходима в любых случаях, когда параллельно протекающим процессам необходимо взаимодействовать. Для неё обычно используют один из 4 объектов синхронизации: mutex, critical section, event, semaphore. Event (События) События уведомляют об окончании какой-либо операции. Объекты-события бывают двух типов: со сбросом вручную и с автосбросом. Первые позволяют возобновлять выполнение сразу нескольких ждущих потоков, вторые — только одного. Объекты-события обычно используют в том случае, когда какой-то поток выполняет инициализацию, а затем сигнализирует другому потоку, что тот может продолжить работу. Инициализирующий поток переводит объект «событие» в занятое состояние и приступает к своим операциям. Закончив, он сбрасывает событие в свободное состояние. Тогда другой поток, который ждал перехода события в свободное состояние, пробуждается и вновь становится планируемым. Для работы с объектом «событие» используются следующие функции: 1. Создание объекта ядра «событие», функция CreateEvent(…), его параметры: 3.Закрытие ненужного объекта ядра «событие». вызовом CloseHandle. 4. Перевод события в свободное состояние function ResetEvent (hEvent: THandle): BOOL; где hEvent – дескриптор события. При успешном выполнении функция возвращает ненулевое значение. В случае ошибки функция возвращает ноль. 5. Перевод события в занятое состояние function SetEvent Семафоры Обобщением блокирующих переменных, так называемые семафоры Дейкстры. Вместо двоичных переменных Дейкстры предложил использовать переменные, которые могут принимать целые неотрицательные значения. Такие переменные, используемые для синхронизации вычислительных процессов, получили название семафоров. Для работы с семафорами вводятся два действия(примитива), традиционно обозначаемых Р и V. Пусть переменная S представляет собой семафор. Тогда действия V(S) и P(S) определяются следующим образом. * V(S): переменная S увеличивается на 1 единым действием. Выборка, наращивание и запоминание не могут быть прерваны. К переменной S нет доступа другим потокам во время выполнения этой операции. * P(S): уменьшение S на 1, если это возможно. Если невозможно уменьшить S=0, то в этом случае поток, вызывающий операцию Р, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение также являются неделимой операцией. Никакие прерывания во время выполнения примитивов V и Р недопустимы. В частном случае, когда семафор S может принимать только значения 0 и 1, он превращается в блокирующую переменную (двоичным семафором). Рассмотрим использование семафоров на классическом примере взаимодействия двух выполняющихся в режиме мультипрограммирования потоков, один из которых пишет данные в буферный пул, а другой считывает из буферного пула. Пусть буферный пул состоит из N буферов, каждый из которых может содержать одну запись. В общем случае поток-писатель и поток-читатель могут иметь различные скорости и обращаться к буферному пулу с переменой интенсивностью. В один период скорость записи может превышать скорость чтения, в другой — наоборот. Для правильной совместной работы поток-писатель должен приостанавливаться, когда все буферы оказываются занятыми, и активизироваться при освобождении хотя бы одного буфера. Напротив, поток-читатель должен приостанавливаться, когда все буферы пусты, и активизироваться при появлении хотя бы одной записи. Date: 2015-08-15; view: 535; Нарушение авторских прав |