BOOL ReleaseMutex (HANDLE Mutex);
Данная функция уменьшает счетчик рекурсии на 1, и если мьютекс передавался во владение поток несколько раз, он должен вызвать ReleaseMutex такое же число раз, чтобы, в конце концов, обнулить счетчик рекурсии.
Когда это произойдет, идентификатор потока также станет равным 0, и мьютекс станет свободным. Система проверит, нет ли ожидающих потоков, и выберет один из них, чтобы передать тому мьютекс.
Как видно, этот объект обладает одним замечательным свойством, которого нет у остальных синхронизирующих объектов: мьютекс запоминает поток, которому он принадлежит. Если посторонний поток попытается вызвать ReleaseMutex, то эта функция просто вернет FALSE. Если же какой-то поток завершится, не успев освободить мьютекс, то считается, что произошел отказ от мьютекса, и система переведет его в сигнальное состояние.
HANDLE Thread1, Thread2;
HANDLE Mutex1;
int WinMain(...)
{
Mutex1 = CreateMutex (NULL, FALSE, “Mutex1”);
// Создается мьютекс
// Создаются два потока, причем пропущены все параметры,
// кроме функции потока
HANDLE Th1 = CreateThread (..., Function1,...);
HANDLE Th2 = CreateThread (..., Function2,...);
// далее можно выполнять любые действия
...
CloseHandle (Mutex1);
}
DWORD WINAPI Function1 (PVOID Parametr)
{
WaitForSingleObject (Mutex1, INFINITE);
...
ReleaseMutex (Mutex1);
return 0;
}
DWORD WINAPI Function2 (PVOID Parametr)
{
WaitForSingleObject (Mutex1, INFINITE);
...
ReleaseMutex (Mutex1);
return 0;
}
Варианты заданий к лабораторной работе №4
Вариант №1
В пансионе отдыхают и предаются размышлениям 5 философов, пронумерованные от 1 до 5. В столовой расположен круглый стол, вокруг которого расставлены 5 стульев, также пронумерованные от 1 до 5. На столе находится одна большая тарелка со спагетти, которая пополняется бесконечно, также там расставлены 5 тарелок, в которые накладывается спагетти, и 5 вилок, назначение которых очевидно.
Для того чтобы пообедать, философ входит в столовую и садится на стул со своим номером. При этом есть философ сможет только в том случае, если свободны две вилки – справа и слева от его тарелки. При выполнении этого условия философ поднимает одновременно обе вилки и может поглощать пищу в течение какого-то заданного времени. В противном случае, философу приходится ждать освобождения обеих вилок.
Пообедав, философ кладет обе вилки на стол одновременно и уходит.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «ожидаемый таймер».
Вариант №2
В пансионе отдыхают и предаются размышлениям 5 философов, пронумерованные от 1 до 5. В столовой расположен круглый стол, вокруг которого расставлены 5 стульев, также пронумерованные от 1 до 5. На столе находится одна большая тарелка со спагетти, которая пополняется бесконечно, также там расставлены 5 тарелок, в которые накладывается спагетти, и 5 вилок, назначение которых очевидно.
Для того чтобы пообедать, философ входит в столовую и садится на стул со своим номером. При этом есть философ сможет только в том случае, если свободны две вилки – справа и слева от его тарелки. При выполнении этого условия философ поднимает одновременно обе вилки и может поглощать пищу в течение какого-то заданного времени. В противном случае, философу приходится ждать освобождения обеих вилок.
Пообедав, философ кладет обе вилки на стол одновременно и уходит.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «событие».
Вариант №3
В пансионе отдыхают и предаются размышлениям 5 философов, пронумерованные от 1 до 5. В столовой расположен круглый стол, вокруг которого расставлены 5 стульев, также пронумерованные от 1 до 5. На столе находится одна большая тарелка со спагетти, которая пополняется бесконечно, также там расставлены 5 тарелок, в которые накладывается спагетти, и 5 вилок, назначение которых очевидно.
Для того чтобы пообедать, философ входит в столовую и садится на стул со своим номером. При этом есть философ сможет только в том случае, если свободны две вилки – справа и слева от его тарелки. При выполнении этого условия философ поднимает одновременно обе вилки и может поглощать пищу в течение какого-то заданного времени. В противном случае, философу приходится ждать освобождения обеих вилок.
Пообедав, философ кладет обе вилки на стол одновременно и уходит.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «семафор».
Вариант №4
В пансионе отдыхают и предаются размышлениям 5 философов, пронумерованные от 1 до 5. В столовой расположен круглый стол, вокруг которого расставлены 5 стульев, также пронумерованные от 1 до 5. На столе находится одна большая тарелка со спагетти, которая пополняется бесконечно, также там расставлены 5 тарелок, в которые накладывается спагетти, и 5 вилок, назначение которых очевидно.
Для того чтобы пообедать, философ входит в столовую и садится на стул со своим номером. При этом есть философ сможет только в том случае, если свободны две вилки – справа и слева от его тарелки. При выполнении этого условия философ поднимает одновременно обе вилки и может поглощать пищу в течение какого-то заданного времени. В противном случае, философу приходится ждать освобождения обеих вилок.
Пообедав, философ кладет обе вилки на стол одновременно и уходит.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «мьютекс».
Вариант №5
В пансионе отдыхают и предаются размышлениям 5 философов, пронумерованные от 1 до 5. В столовой расположен круглый стол, вокруг которого расставлены 5 стульев, также пронумерованные от 1 до 5. На столе находится одна большая тарелка со спагетти, которая пополняется бесконечно, также там расставлены 5 тарелок, в которые накладывается спагетти, и 5 вилок, назначение которых очевидно.
Для того чтобы пообедать, философ входит в столовую и садится на стул со своим номером. При этом есть философ сможет только в том случае, если свободны две вилки – справа и слева от его тарелки. При выполнении этого условия философ поднимает одновременно обе вилки и может поглощать пищу в течение какого-то заданного времени. В противном случае, философу приходится ждать освобождения обеих вилок.
Пообедав, философ кладет обе вилки на стол одновременно и уходит.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «критическая секция».
Вариант №6
В парикмахерской расположено единственное кресло, на котором спит парикмахер, и несколько стульев для клиентов.
Когда клиент приходит в парикмахерскую, он будит парикмахера, садится в кресло. Стрижка производится в течение заданного времени. Если же кресло занято другим клиентом, то вновь прибывший клиент занимает любой свободный стул и ожидает своей очереди (клиенты обслуживаются в порядке очередности, например, времени прибытия). Если все стулья заняты, то клиент поворачивается и уходит.
Когда обслужены все клиенты, парикмахер садится в кресло и снова засыпает.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «ожидаемый таймер».
Вариант №7
В парикмахерской расположено единственное кресло, на котором спит парикмахер, и несколько стульев для клиентов.
Когда клиент приходит в парикмахерскую, он будит парикмахера, садится в кресло. Стрижка производится в течение заданного времени. Если же кресло занято другим клиентом, то вновь прибывший клиент занимает любой свободный стул и ожидает своей очереди (клиенты обслуживаются в порядке очередности, например, времени прибытия). Если все стулья заняты, то клиент поворачивается и уходит.
Когда обслужены все клиенты, парикмахер садится в кресло и снова засыпает. Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «событие».
Вариант №8
В парикмахерской расположено единственное кресло, на котором спит парикмахер, и несколько стульев для клиентов.
Когда клиент приходит в парикмахерскую, он будит парикмахера, садится в кресло. Стрижка производится в течение заданного времени. Если же кресло занято другим клиентом, то вновь прибывший клиент занимает любой свободный стул и ожидает своей очереди (клиенты обслуживаются в порядке очередности, например, времени прибытия). Если все стулья заняты, то клиент поворачивается и уходит.
Когда обслужены все клиенты, парикмахер садится в кресло и снова засыпает.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «семафор».
Вариант №9
В парикмахерской расположено единственное кресло, на котором спит парикмахер, и несколько стульев для клиентов.
Когда клиент приходит в парикмахерскую, он будит парикмахера, садится в кресло. Стрижка производится в течение заданного времени. Если же кресло занято другим клиентом, то вновь прибывший клиент занимает любой свободный стул и ожидает своей очереди (клиенты обслуживаются в порядке очередности, например, времени прибытия). Если все стулья заняты, то клиент поворачивается и уходит.
Когда обслужены все клиенты, парикмахер садится в кресло и снова засыпает.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «мьютекс».
Вариант №10
В парикмахерской расположено единственное кресло, на котором спит парикмахер, и несколько стульев для клиентов.
Когда клиент приходит в парикмахерскую, он будит парикмахера, садится в кресло. Стрижка производится в течение заданного времени. Если же кресло занято другим клиентом, то вновь прибывший клиент занимает любой свободный стул и ожидает своей очереди (клиенты обслуживаются в порядке очередности, например, времени прибытия). Если все стулья заняты, то клиент поворачивается и уходит.
Когда обслужены все клиенты, парикмахер садится в кресло и снова засыпает.
Описанный процесс происходит бесконечно.
Воспользоваться объектами синхронизации типа «критическая секция».
Вариант №11
Рассмотрим взаимодействие двух потоков, один из которых пишет данные в буферный пул, а другой считывает их из пула. Буферный пул состоит из N буферов, каждый содержит одну запись. В общем случае поток-писатель и поток-читатель имеют разные скорости и обращаются к пулу с переменной интенсивностью. Для правильной работы поток-писатель приостанавливается, когда все буферы заняты, и переходит в активное состояние при наличии хотя бы одного свободного буфера. Поток-читатель приостанавливается, когда все буферы пусты, и активизируется, когда появляется, по крайней мере, одна запись.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |


