Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Новости сайта "Системное Программирование" Выпуск от 14/03/2003 - Программа


Информационный Канал Subscribe.Ru

Новости №20

Новости сайта "Системное Программирование"


// Lonely.cpp : Defines the entry point for the console application.
// (С) НТУ-"ХПИ" Кафедра ВТП КИТ-20Б Софронов П.Н.
/*
II. Задача "читатели-писатели". Имеются данные, совместно
используемые нескольким процессами (нитями). Имеется несколько
процессов (нитей), которые только читают эти данные ("читатели")
и несколько других, которые только записывают данные (или
изменяют их) ("писатели"). При этом должны удовлетворяться
следующие условия:
- любое число "читателей" могут одновременно читать данные;
- записывать данные в определенный момент может только один
   "писатель".
- когда "писатель" записывает данные, ни один читатель не
    может его читать.

7. Задача II. Механизм синхронизации - семафоры.
   Преимущество имеют "читатели".
   1 процесс - "писатель", 3 - "читателя".
*/

#include 
#include 
#include "stdafx.h"

HANDLE hSem;
HANDLE hThr1,hThr2,hThr3,hThr;
unsigned long uThrID;
HANDLE hMFile;
LPVOID StartMFile;
char Fn1[]="MyMemoryMappedFile";
char Buf[]="Buffer Is Empty              ";

int Thread( void* pParams ) //Процес писатель
{
        int ii=0;
        char te=0;
        hMFile=OpenFileMapping(FILE_MAP_READ, TRUE, Fn1);
     StartMFile=MapViewOfFile(hMFile, FILE_MAP_WRITE, 0, 0, 100);
                if(!StartMFile) {  return 0;};
        while (1)
        {
                WaitForSingleObject( hSem, INFINITE );
                printf("Ready 1   ");
                WaitForSingleObject( hSem, INFINITE );
                printf("Ready 2   ");
                WaitForSingleObject( hSem, INFINITE );
                printf("Ready 3   ");
                //Пишем в отображаемый файл
                te++;
                if (te>255)
                {
                        te=1;
                };
                CopyMemory(StartMFile, &te , 1);
                ii++;
                printf("%c \n",te);
                ReleaseSemaphore( hSem, 3, NULL );
        }
}

int Thread1( void* pParams ) //Процесы читатели
{
        char Te;
        hMFile=OpenFileMapping(FILE_MAP_READ, TRUE, Fn1);
        StartMFile=MapViewOfFile(hMFile, FILE_MAP_WRITE, 0, 0, 100);
                if(!hMFile) { return 0;}
        while (1)
        {
                WaitForSingleObject( hSem, INFINITE );
                //Читаем из отображаемого файла
                CopyMemory(&Te, StartMFile, 1);
         printf("Write  %c \n",Te);
        ReleaseSemaphore( hSem, 1, NULL );
                for (int jj=0;jj<30000;jj++);
        }
}

int main()
{
        int ci=5000;
hMFile=CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,PAGE_READWRITE, 0, 100, Fn1);
        if(!hMFile) { return 0;}
        hSem=CreateSemaphore( NULL, 3, 3, "MySemaphore1" );
        hThr=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,NULL,0,&uThrID);
        hThr1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&uThrID);
        hThr2=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&uThrID);
        hThr3=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&uThrID);
        do
        {
        } while (1);
        UnmapViewOfFile(hMFile);
        CloseHandle(hMFile);
};

                          

 

// Lonely.cpp : Defines the entry point for the console application.
// (С) НТУ-"ХПИ" Кафедра ВТП КИТ-20Б Софронов П.Н.
/*
II. Задача "читатели-писатели". Имеются данные, совместно
используемые нескольким процессами (нитями). Имеется несколько
процессов (нитей), которые только читают эти данные ("читатели")
и несколько других, которые только записывают данные (или
изменяют их) ("писатели"). При этом должны удовлетворяться
следующие условия:
- любое число "читателей" могут одновременно читать данные;
- записывать данные в определенный момент может только один
   "писатель".
- когда "писатель" записывает данные, ни один читатель не
    может его читать.

7. Задача II. Механизм синхронизации - семафоры.
   Преимущество имеют "читатели".
   1 процесс - "писатель", 3 - "читателя".
*/

#include 
#include 
#include "stdafx.h"

HANDLE hSem;
HANDLE hThr1,hThr2,hThr3,hThr;
unsigned long uThrID;
HANDLE hMFile;
LPVOID StartMFile;
char Fn1[]="MyMemoryMappedFile";
char Buf[]="Buffer Is Empty              ";

int Thread( void* pParams ) //Процес писатель
{
        int ii=0;
        char te=0;
        hMFile=OpenFileMapping(FILE_MAP_READ, TRUE, Fn1);
     StartMFile=MapViewOfFile(hMFile, FILE_MAP_WRITE, 0, 0, 100);
                if(!StartMFile) {  return 0;};
        while (1)
        {
                WaitForSingleObject( hSem, INFINITE );
                printf("Ready 1   ");
                WaitForSingleObject( hSem, INFINITE );
                printf("Ready 2   ");
                WaitForSingleObject( hSem, INFINITE );
                printf("Ready 3   ");
                //Пишем в отображаемый файл
                te++;
                if (te>255)
                {
                        te=1;
                };
                CopyMemory(StartMFile, &te , 1);
                ii++;
                printf("%c \n",te);
                ReleaseSemaphore( hSem, 3, NULL );
        }
}

int Thread1( void* pParams ) //Процесы читатели
{
        char Te;
        hMFile=OpenFileMapping(FILE_MAP_READ, TRUE, Fn1);
        StartMFile=MapViewOfFile(hMFile, FILE_MAP_WRITE, 0, 0, 100);
                if(!hMFile) { return 0;}
        while (1)
        {
                WaitForSingleObject( hSem, INFINITE );
                //Читаем из отображаемого файла
                CopyMemory(&Te, StartMFile, 1);
         printf("Write  %c \n",Te);
        ReleaseSemaphore( hSem, 1, NULL );
                for (int jj=0;jj<30000;jj++);
        }
}

int main()
{
        int ci=5000;
hMFile=CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,PAGE_READWRITE, 0, 100, Fn1);
        if(!hMFile) { return 0;}
        hSem=CreateSemaphore( NULL, 3, 3, "MySemaphore1" );
        hThr=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread,NULL,0,&uThrID);
        hThr1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&uThrID);
        hThr2=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&uThrID);
        hThr3=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)Thread1,NULL,0,&uThrID);
        do
        {
        } while (1);
        UnmapViewOfFile(hMFile);
        CloseHandle(hMFile);
};
                        

Мы переехали на: http://www.programmer.iatp.org.ua/

Нам будет приятно если Вы установите код нашей кнопки

<A HREF="http://www.programmer.iatp.org.ua/">
<IMG SRC="http://www.programmer.iatp.org.ua/images/baner.gif"
ALT=" Сайт Системного Программиста" BORDER=0 HEIGHT=31 WIDTH=88></A>


Харьков 2001 - 2003
(с) Софронов П.Н. 2001 - 2003

(с) Команда "Системных Программистов" 2002 - 2003



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное