diff --git a/aufgaben/sheet12/README.md b/aufgaben/sheet12/README.md new file mode 100755 index 0000000..103688f --- /dev/null +++ b/aufgaben/sheet12/README.md @@ -0,0 +1,4 @@ +Blatt 12 +======== + +Auf diesem Blatt gibt es nur eine kleine Aufgabe, da wir mit Multithreading noch nicht so weit gekommen sind, wie ich mir das vorgestellt habe. diff --git a/aufgaben/sheet12/task1/README.md b/aufgaben/sheet12/task1/README.md new file mode 100755 index 0000000..20bed2a --- /dev/null +++ b/aufgaben/sheet12/task1/README.md @@ -0,0 +1,14 @@ +Aufgabe 1: Sleep Sort +===================== + +Sortieralgorithmen sind ja immer toll. Da wir jetzt Multithreading können, wollen wir "Sleep Sort" implementieren. Der Trick ist: + +- Für jeden Integer im zu sortierenden Array wird ein Thread gestartet +- Jeder Thread schläft entsprechend seinem Integer lange +- Sobald der Thread aufwacht, pusht er seinen Integer auf ein Ergebnis-Array + +Danach sollte das Ergebnis-Array theoretisch sortiert sein. Um zu untersuchen, wie weit Theorie und Praxis voneinander abweichen, prüfen wir ab welchen Zeitdimensionen der Scheduler genau genug wird: + +Zuerst soll jeder Thread sein Element in *Nano*sekunden schlafen. Nanosekunden sind eher kurz und hier wird man bei einem Array wie `[83, 12, 13, 35, 91]` noch keinen Erfolg haben. Wenn wir nach dem ersten Versuch feststellen, dass das Ergebnis-Array nicht sortiert ist, versuchen wir es noch mal. Diesmal soll aber jeder Thread zwei mal sein Element in Nanosekunden schlafen. + +Entsprechend erhöhen wir die Zeit, für die geschlafen werden soll, mit jedem Versuch um Faktor 2. Euer Programm soll am Ende ausgeben, wie viele Versuche gebraucht wurden und welcher Zeit-Multiplikator schließlich ausreichte, um das Array zu sortieren. diff --git a/aufgaben/sheet12/task1/sleep-sort.rs b/aufgaben/sheet12/task1/sleep-sort.rs new file mode 100755 index 0000000..33f9c23 --- /dev/null +++ b/aufgaben/sheet12/task1/sleep-sort.rs @@ -0,0 +1,8 @@ + +fn main() { + let mut arr = [83, 12, 13, 35, 91, 71, 75, 58, 26, 38, 2, 23, 10]; + sleep_sort(&mut arr); + assert_eq!(arr, [2, 10, 12, 13, 23, 26, 35, 38, 58, 71, 75, 83, 91]); +} + +fn sleep_sort(arr: &mut [u64]) {}