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?