Mam funkcję, która przeklada elementy tablicy. I wątek, który tę funkcję wykorzystuje. Jak zrobić by ta sama funkcja była wykonywana równolegle?
W sumie to są dwie funkcje, jedna naklada pierwszy element i druga przeklada go do samego końca. Tyle, że teraz wygląda to tak, że:
-pierwszy element zostaje nałożony
-zostaje przelożony na drugie miejsce
-w tym czasie nakladany jest znowu pierwszy element
-i potem dopóki nie pierwszy element z drugiego miejsca nie zostanie przelożony do końca nic innego się nie dzieje.
Wiem, że mógłbym zrobić N-1 funkcji (gdzie N to rozmiar tablicy), które przekladałyby te elementy ale to nie jest wyjście.
Funkcje wygladają tak:
DWORD WINAPI Naklada(LPVOID)
{
while(1)
{
Sleep((rand()%10)*150 + 100);
WaitForSingleObject(semMiejsca,INFINITE);
bufor[0] = 1;
ReleaseSemaphore(semElementy,1,NULL);
RedrawWindow(hwndApp,NULL,NULL,RDW_INTERNALPAINT);
};
return 0;
};
DWORD WINAPI Przeklada(LPVOID)
{
while(1)
{
Sleep((rand()%10)*200 + 100);
WaitForSingleObject(semElementy,INFINITE);
bufor[wy_indeks] = 0;
wy_indeks = (wy_indeks + 1) % N;
bufor[wy_indeks] = 1;
ReleaseSemaphore(semMiejsca,1,NULL);
RedrawWindow(hwndApp,NULL,NULL,RDW_INTERNALPAINT);
};
return 0;
};
Wątki wywołujące funkcje tak:
DWORD ID;
thNaklada = CreateThread(NULL,0,Naklada,0,0,&ID);
thPrzeklada = CreateThread(NULL,0,Przeklada,0,0,&ID);
Naprawdę to takie trudne?