zadanie polega na posortowaniu tablicy danych liczbowych
dane należy podzielić na 4 możliwie równe części
każda z 4 części jest sortowana niezależnie przez osobny wątek (dowolną metodą)
jak tylko wątki 1. i 2. (sortujące "pierwszą" połowe dancyh) zakończą swoją prace, wyniki ich
pracy należy scalić z zachowaniem porządku sortowania (tak jak w merge sort)
analogicznie należy postąpić po zakończeniu pracy wątku 3. i 4. (sortujących "drugą" połowe dancyh)
oczywiście oba scalania mogą przebiegać równolegle
najszybciej jak będzie to możliwe należy scalić obie części danych w ostatecznie posortowany zbiór danych
Specyfikacja:
w menu pozycje pozwalające:
wygenerować losowe dane
rozpocząć proces sortowania
należy zadbać o uniemożliwienie ich niepoprawnego użycia (np. próba wygenerowania danych podczas sortowania, itp.)
sposób wizualizacji i realizacji okna głównego jest dowolny
w czasie procesu sortowania należy stale aktualizować wizualizacje danych
kod rysujący znajduje się w procedurze okna głównego (nie wolno rysować w wątkach sortujących), należy wyeliminować efekt mrugania
rysowanie nie może wstrzymywać pracy wątków sortujących
w programie nie wolno wykorzystywać timera (SetTimer/WM_TIMER)
nie wolno stosować busy waiting, należy wykorzystać mechanizmy synchronizacji systemu windows
po zakończeniu procesu sortowania nie może istnieć żaden wątek poza głównym
należy zasymulować prace wątków z różną prędkością (dotyczy tylko wstępnego sortowania, nie scalania)
Wskazówki:
ilość jednocześnie używanych wątków (poza głównym) może być większa niż 4
CreateThread()
WaitForMultipleObjects()
CloseHandle()
PostMessage()
Przybliżona punktacja:
poprawność procesu sortowania (zgodność z wymaganym schematem): 4.0
poprawne użycie wątków i mechanizmu synchronizacji: 3.0