Міністерство освіти та науки України
Національний Технічний Університет
«Харківський Політехнічний Інститут»
Звіт
з лабораторної роботи № 3
з дисципліни «СПО»
Виконав: студент
групи КІТ-14б
Губін О.С.
Викладачі:
Максюта Н.В.
Межерицький С.Г.
Харків 2006 р.
Тема: «Синхронізація нітій усередині процесу в ОС Windows».
Мета роботи: вивчити можливості застосування механізмів синхронізації нітій одного процесу в ОС Windows.
Індивідуальне завдання: Задача «виробник-споживач». Тип синхронізації – події.
Хід виконання роботи:
Текст програми:
// lb3.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
HANDLE hEvent1, hEvent2;
int a[5];
HANDLE hThpr, hThpot;
unsigned long uThrID;
void Thread( void* pParams )
{
int i, num = 1;
while (1)
{
WaitForSingleObject( hEvent2, INFINITE );
for (i=0; i<5; i++) a[i] = num;
num++;
for (i=0; i<5; i++)
printf ("%d ", a[i]);
printf("\n");
Sleep (1000);
ResetEvent (hEvent2);
SetEvent( hEvent1 );
}
}
void Thread1( void* pParams )
{
int i,j, num = 0, b[5];
while (1)
{
WaitForSingleObject( hEvent1, INFINITE );
for (j=0; j<5; j++){
b[j]=a[j];
a[j]=0;
}
for (j=0; j<5; j++)
printf ("%d ", a[j]);
printf("\n");
Sleep (1000);
ResetEvent (hEvent1);
SetEvent( hEvent2 );
}
}
int main( void )
{
int i=0;
hEvent1=CreateEvent( NULL, FALSE, TRUE, NULL );
hEvent2=CreateEvent( NULL, FALSE, FALSE, NULL );
hThpr=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,NULL,0,&uThrID);
hThpot=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&uThrID);
CloseHandle (hEvent1);
CloseHandle (hEvent2);
getch();
return 0;
}
Результат роботи програми:
1 1 1 1 1
0 0 0 0 0
2 2 2 2 2
0 0 0 0 0
3 3 3 3 3
0 0 0 0 0
Висновок: В ході виконання лабораторної роботи вивчив можливості застосування механізмів синхронізації нітій одного процесу в ОС Windows.
// lb3.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
HANDLE hEvent1, hEvent2;
int a[5];
HANDLE hThpr, hThpot;
unsigned long uThrID;
void Thread( void* pParams )
{
int i, num = 1;
while (1)
{
WaitForSingleObject( hEvent2, INFINITE );
for (i=0; i<5; i++) a[i] = num;
num++;
for (i=0; i<5; i++)
printf ("%d ", a[i]);
printf("\n");
Sleep (1000);
ResetEvent (hEvent2);
SetEvent( hEvent1 );
}
}
void Thread1( void* pParams )
{
int i,j, num = 0, b[5];
while (1)
{
WaitForSingleObject( hEvent1, INFINITE );
for (j=0; j<5; j++){
b[j]=a[j];
a[j]=0;
}
for (j=0; j<5; j++)
printf ("%d ", a[j]);
printf("\n");
Sleep (1000);
ResetEvent (hEvent1);
SetEvent( hEvent2 );
}
}
int main( void )
{
int i=0;
hEvent1=CreateEvent( NULL, FALSE, TRUE, NULL );
hEvent2=CreateEvent( NULL, FALSE, FALSE, NULL );
hThpr=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,NULL,0,&uThrID);
hThpot=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&uThrID);
CloseHandle (hEvent1);
CloseHandle (hEvent2);
getch();
return 0;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.