Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <windows.h>
#include <iostream.h>
volatile long n;
void producer()
{
long goods = 0;
for (;;)
{
++goods; // производим новое число
// помещаем число в контейнер, если он пустой
InterlockedCompareExchange((PVOID*)&n, (PVOID)goods, 0);
Sleep(150);
}
}
void consumer()
{
long goods;
for (;;)
{
Sleep(400);
goods = n; // извлекаем число из контейнера
InterlockedExchange((LONG*)&n, 0); // отмечаем, что контейнер пустой
cout << "Goods are consumed: " << goods << endl;
}
}
int main()
{
HANDLE hThread_p, hThread_c;
DWORD IDThread_p, IDThread_c;
cout << "Press any key to terminate threads." << endl;
// создаем потоки
hThread_p = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)producer,
NULL, 0, &IDThread_p);
if (hThread_p == NULL)
return GetLastError();
hThread_c = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)consumer,
NULL, 0, &IDThread_c);
if (hThread_c == NULL)
return GetLastError();
cin.get();
// прерываем выполнение потоков
TerminateThread(hThread_p, 0);
TerminateThread(hThread_c, 0);
// закрываем дескрипторы потоков
CloseHandle(hThread_c);
CloseHandle(hThread_p);
return 0;
}
Соседние файлы в папке Листинги