Синхронізація нітій усередині процесу в ОС Windows

Страницы работы

Содержание работы

Міністерство освіти та науки України

Національний Технічний Університет

«Харківський Політехнічний Інститут»

Звіт

з лабораторної роботи № 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;

}

Похожие материалы

Информация о работе