Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Листинги / Листинги / 06_03_TryEnterCriticalSection

.cpp
Скачиваний:
4
Добавлен:
24.03.2016
Размер:
1.17 Кб
Скачать
#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <iostream.h>

CRITICAL_SECTION cs;

DWORD WINAPI thread(LPVOID)
{
  int i,j;
  
  for (j = 0; j < 10; ++j)
    // попытка войти в критическую секцию
    if (TryEnterCriticalSection (&cs))
    {
      for (i = 0; i < 10; i++)
        cout << j << flush;
      cout << endl;
      // выход из критической секции
      LeaveCriticalSection(&cs);
    }
    
  return 0;
}

int main()
{
  int i,j;
  HANDLE  hThread;
  DWORD  IDThread;
  // инициализируем критическую секцию
  InitializeCriticalSection(&cs);

  hThread=CreateThread(NULL, 0, thread, NULL, 0, &IDThread);
  if (hThread == NULL)
    return GetLastError();

  for (j = 10; j < 20; j++)
    // попытка войти в критическую секцию
    if (TryEnterCriticalSection(&cs))
    {
      for (i = 0; i < 10; i++)
        cout << j << ' ' << flush;
      cout << endl;
      // выход из критической секции
      LeaveCriticalSection(&cs);
    }
  // ждем завершения работы потока thread
  WaitForSingleObject(hThread, INFINITE);
  // удаляем критическую секцию
  DeleteCriticalSection(&cs);

  return 0;
}
Соседние файлы в папке Листинги