АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Завдання. Основний процес виконує паралельне обчислення виразу і видає його результат в консоль

Читайте также:
  1. II. ЗАВДАННЯ ТА ОБОВ'ЯЗКИ
  2. АЛГОРИТМ РОБОТИ НАД ПРОФЕСІЙНО-ОРІЄНТОВАНИМИ ЗАВДАННЯМИ З КУРСУ «ОСНОВИ ПСИХОЛОГІЧНОГО ТРЕНІНГУ»
  3. ВИКОНАННЯ ЗАВДАНня
  4. Вирішення завдання
  5. Вихідні дані завдання й проміжні розрахунки
  6. Виховні завдання
  7. Гносеологія, предмет, структура, завдання. Онтологія.
  8. До теми: ПОНЯТТЯ, ПРЕДМЕТ, ЗАВДАННЯ І СИСТЕМА КРИМІНАЛЬНОГО ПРАВА. ПРИНЦИПИ КРИМІНАЛЬНОГО ПРАВА
  9. Домашнього завдання
  10. Завдання
  11. Завдання
  12. ЗАВДАННЯ

Основний процес виконує паралельне обчислення виразу і видає його результат в консоль.

Один дочірній процес забезпечує заповнення файлу випадковими числами, а другий - підрахунок суми елементів цього файлу. Результуюче значення виразу підраховує основний процес. Розмір файлу - 6000 елементів, тип синхронізації - мютекс, спосіб обміну інформацією - почтові слоти (mailslots).

 

Файл WriteFile.cpp

 

#include<fstream>

#include<time.h>

#include<windows.h>

 

void main(int argc,char** argv)

{

HANDLE hShared = CreateMutex(NULL, TRUE, "WriteData");

char* filename = argv[1];

unsigned int N = 6000;

std::ofstream file(filename);

srand(GetTickCount());

for (int i=0;i<N;i++) file<<1+rand()%1000<<" ";

ReleaseMutex(hShared);

CloseHandle(hShared);

}

 

Файл ReadFile.cpp

 

#include<windows.h>

#include<fstream>

#include<iostream>

using namespace std;

 

void main()

{

HANDLE hShared = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "WriteData");

WaitForSingleObject(hShared, INFINITE);

long int s=0;

int a;

ifstream f_txt ("text.txt");


while (!f_txt.eof())

{

f_txt>>a;

s+=a;

}

HANDLE hf=NULL;

hf=CreateFile("\\\\.\\mailslot\\slot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

DWORD dwwr;

char b[5],name[5],*ntemp;

ntemp=itoa(s,name,10);

strcpy(name,ntemp);

WriteFile(hf,&name,strlen(name),&dwwr,NULL);

cin.get();

cin.get();

}

 

Файл Mutex.cpp

 

#include<iostream>

#include<windows.h>

using namespace std;

 

void main()

{

HANDLE hMutex;

STARTUPINFO si;

PROCESS_INFORMATION pi;

hMutex = CreateMutex(NULL, FALSE, "DemoMutex");

ZeroMemory(&si, sizeof(STARTUPINFO));

si.cb = sizeof(STARTUPINFO);

CreateProcess(NULL,"WriteFile.exe text.txt",NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);

ResumeThread(pi.hThread);

CreateProcess(NULL,"ReadFile.exe",NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);

ResumeThread(pi.hThread);

HANDLE hsl= CreateMailslot("\\\\.\\mailslot\\slot",0,MAILSLOT_WAIT_FOREVER,NULL);

DWORD nBytesRead;

char buffer[5];

ReadFile(hsl, &buffer, strlen(buffer), &nBytesRead, NULL);

cout<<buffer; cin.get();}

 

 

Висновок: я ознайомився із поняттям процесу та потоку, методами синхронізації роботи процесів та потоків в MS Windows.


Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)