Вопрос
Есть программа: синхронизация потоков с использованием КРИТИЧЕСКИХ РАЗДЕЛОВ.
Требуется пример программы синхронизации потоков с использованием МЬЮТЕКСОВ.
Ответ
с uinc.ru
Пример. Допустим, в программе используется ресурс, например, файл или буфер в памяти. Функция WriteToBuffer() вызывается из разных потоков. Чтобы избежать коллизий при одновременном обращении к буферу из разных потоков, используем мьютекс. Прежде чем обратиться к буферу, ожидаем <освобождения> мютекса.
HANDLE hMutex;
int main()
{
hMutex = CreateMutex( NULL, FALSE, NULL);
// Создаем мьютекс в свободном состоянии …
// Создание потоков, и т.д. … } BOOL WriteToBuffer()
{
DWORD dwWaitResult;
// Ждем освобождения мьютекса перед тем как обратиться к буферу.
dwWaitResult = WaitForSingleObject( hMutex, 5000L);
// 5 секунд на таймаут љ if (dwWaitResult == WAIT_TIMEOUT)
// Таймаут. Мьютекс за это время не освободился.
{
return FALSE;
} else
// Мьютекс освободился, и наш поток его занял. Можно работать.
{ Write_to_the_buffer(). … ReleaseMutex(hMutex);
// Освобождаем мьютекс.
} return TRUE;
}
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация