|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Завдання. Основний процес виконує паралельне обчислення виразу і видає його результат в консольОсновний процес виконує паралельне обчислення виразу і видає його результат в консоль. Один дочірній процес забезпечує заповнення файлу випадковими числами, а другий - підрахунок суми елементів цього файлу. Результуюче значення виразу підраховує основний процес. Розмір файлу - 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 сек.) |