mirror of
https://github.com/LukasKalbertodt/programmieren-in-rust.git
synced 2024-11-17 18:48:56 +01:00
Add sheet12
This commit is contained in:
parent
e69ec3013c
commit
ebd120834e
4
aufgaben/sheet12/README.md
Executable file
4
aufgaben/sheet12/README.md
Executable file
@ -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.
|
14
aufgaben/sheet12/task1/README.md
Executable file
14
aufgaben/sheet12/task1/README.md
Executable file
@ -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.
|
8
aufgaben/sheet12/task1/sleep-sort.rs
Executable file
8
aufgaben/sheet12/task1/sleep-sort.rs
Executable file
@ -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]) {}
|
Loading…
Reference in New Issue
Block a user