ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
160
Функции работы с мютексом:
Создание мютекса
HANDLE CreateMutex(
lpSecurityAttributes LpMutexAttributes, //ссылка на атрибуты безопасности
BOOL bInitialOwner, //флаг первоначального владения
char* lpName) // имя мютекса
Вызов:
HANDLE hMutex=CreateMutex(NULL,FALSE,”MyMutex”);
Уничтожение:
void CloseHandle (HANDLE hMutex);
Захват мютекса
void WaitForSingleObject (HANDLE hMutex,int Time);
Здесь hMutex – дескриптор мютекса, а Time – время ожидания мютекса в мил-
лисекундах. Здесь можно указать константу INFINITE, и тогда поток будет ждать
освобождения мютекса без учета времени.
Вариант вызова:
WaitForSingleObject (hMutex,INFINITE);
Освобождение мютекса
void ReleaseMutex (HANDLE hMutex);
Поскольку мютексом одновременно может владеть только один объект, то
фрагмент кода между вызовами WaitForSingleObject и ReleaseMutex будет выпол-
няться одновременно только одним потоком.
Запустите программу. Объясните наблюдаемые явления.
В чем разница работы критических секций и мютексов?
Примерный текст программы.
Текст программы может содержать сознательно внесенные в него ошибки,
делающие программу неработоспособной. Пожалуйста, не переписывайте код
программы из методички.
// CritDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Crit.h"
#include "CritDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
1...,152,153,154,155,156,157,158,159,160,161 163,164,165,166,167,168,169,170,171,172,...180