Читайте также:
|
|
Тема: Практична реалізація багатопотоковості
Завдання:
1.Дослідити роботу програми.
2.Описати документацію на типи даних, структури та функції win32 API, які використовуються в програмі.
3.За завданням викладача розробити власний проект на основі існуючого.
Синхронізація потоків, які виконуються в різних процесах за допомогою м’ютекса
CreateMutex.cpp
#include <windows.h>
#include <iostream.h>
int main()
{
HANDLE hMutex;
char lpszAppName[] = "C:\\ConsoleProcess.exe";
STARTUPINFO si;
PROCESS_INFORMATION pi;
// создаем мьютекс
hMutex = CreateMutex(NULL, FALSE, "DemoMutex");
if (hMutex == NULL)
{
cout << "Create mutex failed." << endl;
cout << "Press any key to exit." << endl;
cin.get();
return GetLastError();
}
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
// создаем новый консольный процесс
if (!CreateProcess(lpszAppName, NULL, NULL, NULL, FALSE,
NULL, NULL, NULL, &si, &pi))
{
cout << "The new process is not created." << endl;
cout << "Press any key to exit." << endl;
cin.get();
return GetLastError();
}
// выводим на экран строки
for (int j = 0; j < 10; ++j)
{
// захватываем мьютекс
WaitForSingleObject(hMutex, INFINITE);
for (int i = 0; i < 10; i++)
{
cout << j << ' ' << flush;
Sleep(10);
}
cout << endl;
// освобождаем мьютекс
ReleaseMutex(hMutex);
}
// закрываем дескриптор мьютекса
CloseHandle(hMutex);
// ждем пока дочерний процесс закончит работу
WaitForSingleObject(pi.hProcess, INFINITE);
// закрываем дескрипторы дочернего процесса в текущем процессе
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}
ConsoleProcess.cpp
#include <windows.h>
#include <iostream.h>
int main()
{
HANDLE hMutex;
int i,j;
// открываем мьютекс
hMutex = OpenMutex(SYNCHRONIZE, FALSE, "DemoMutex");
if (hMutex == NULL)
{
cout << "Open mutex failed." << endl;
cout << "Press any key to exit." << endl;
cin.get();
return GetLastError();
}
for (j = 10; j < 20; j++)
{
// захватываем мьютекс
WaitForSingleObject(hMutex, INFINITE);
for (i = 0; i < 10; i++)
{
cout << j << ' ' << flush;
Sleep(5);
}
cout << endl;
// освобождаем мьютекс
ReleaseMutex(hMutex);
}
// закрываем дескриптор объекта
CloseHandle(hMutex);
return 0;
}
Лабораторна робота 4
Тема: Керування оперативною пам’яттю
Завдання:
1.Дослідити роботу програми.
2.Описати документацію на типи даних, структури та функції win32 API, які використовуються в програмі.
3.За завданням викладача розробити власний проект на основі існуючого.
Дата добавления: 2015-07-11; просмотров: 145 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Приклад синхронізації потоків за допомогою об’єкта CRITICAL_SECTION | | | Функції Win32API для файлових операцій |