СообЧа > База Знаний > Программирование > C, С++ > Borland C++ Builder

Вопрос

Есть программа: синхронизация потоков с использованием КРИТИЧЕСКИХ РАЗДЕЛОВ.

Требуется пример программы синхронизации потоков с использованием МЬЮТЕКСОВ.

Ответ

с 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 Сообщество Чайников
Контактная информация