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