Организовать совместное использование мьютекса и события для защиты добавления элемента в очереди. Очередь произвольного формата. Событие сигнализирует чтение из очереди, а мьютекс - запись. Требуется снять статистику по времени использования объектов ядра.
Собственно вот до чего удалось дойти, а дальше как-то путные мысли в голову не идут...
и ещё поправьте меня если что, результат же по идее должен получаться сначала первое число из массива,потом первое и второе, дальше первое второе третье ну и т.д?
конечно много индусского кода, но как могу.
| Код | #include "stdafx.h" #include <windows.h> #include <conio.h> #include <stdio.h> #include <iostream>
using namespace std;
const int N=10; DWORD WINAPI Proc1(LPVOID); DWORD WINAPI Proc2(LPVOID); int i = 0; int tmp = 0; int y = 3; int m[] = {0,0,0,0,0,0,0,0,0,0}; HANDLE h1,h2,eve,mtx; void main() { HANDLE h[2]; eve = CreateEvent(NULL, true, false, NULL); h[0] = CreateThread(NULL,0,&Proc1,NULL,0,0); h[1] = CreateThread(NULL,0,&Proc2,NULL,0,0); WaitForMultipleObjects(2,h,true,INFINITE); CloseHandle(h[0]); CloseHandle(h[1]); CloseHandle(eve); CloseHandle(mtx); _getch(); }
DWORD WINAPI Proc1( LPVOID lpParam ) { cout<<("write")<<('\n'); for ( i = tmp; i < N; i++) { tmp = i; mtx = CreateMutex(NULL, false, NULL); WaitForSingleObject(eve,INFINITE); OpenMutex(NULL, true, NULL); m[i] = y*i; ResetEvent(eve); ReleaseMutex(mtx); } return 0; } DWORD WINAPI Proc2( LPVOID lpParam ) { cout<<("watch")<<('\n'); WaitForSingleObject(mtx,INFINITE); for ( int j = 0; j < tmp+10; j++) { cout<<i<<(" = ")<<m[j]<<(" "); SetEvent(eve); } cout<<('\n'); return 0; }
|
|