Joshua Rutschmann hace 8 años
padre
commit
7b67480ee7
Se han modificado 2 ficheros con 60 adiciones y 1 borrados
  1. 59
    0
      hw8/simu1/ANSWERS.md
  2. 1
    1
      hw8/simu1/main-race.c

+ 59
- 0
hw8/simu1/ANSWERS.md Ver fichero

@@ -0,0 +1,59 @@
1
+# hw8 - Simulation 1 - Antworten
2
+
3
+1. Helgrind markiert die richtigen Stellen im Code:
4
+    ```text
5
+    ==1930== Possible data race during write of size 4 at 0x60207C by thread #1
6
+    ==1930== Locks held: none
7
+    ==1930==    at 0x400C9A: main (main-race.c:15)
8
+    ==1930==
9
+    ==1930== This conflicts with a previous write of size 4 by thread #2
10
+    ==1930== Locks held: none
11
+    ==1930==    at 0x400C5A: worker (main-race.c:8)
12
+    ```
13
+    Weiterhin erhält man die Information über den Lock (hier `none`), die Art des Problems (`Possible data race`) und die Größe der Daten, die geschrieben werden.
14
+
15
+2. Codekorrektur
16
+
17
+    1. Wenn ich eine der Zeilen lösche (bzw. auskommentiere), meldet helgrind keinen Fehler mehr (auch nicht für die zweite betreffende Zeile).
18
+
19
+    2. Wenn man nur bei einer Variable den Lock setzt, erkennt helgrind den Fehler:
20
+        ```text
21
+        ==18432== Possible data race during write of size 4 at 0x602084 by thread #1
22
+        ==18432== Locks held: none
23
+        ==18432==    at 0x400CB2: main (main-race.c:18)
24
+        ==18432==
25
+        ==18432== This conflicts with a previous write of size 4 by thread #2
26
+        ==18432== Locks held: 1, at address 0x6020A0
27
+        ==18432==    at 0x400C68: worker (main-race.c:10)
28
+        ```
29
+    3. Wenn man bei beiden Variablen einen Lock setzt, findet helgrind wieder keine Fehler.
30
+
31
+3. Vermutlich ist der Fehler, dass Thread 1 einen Lock auf v1 setzt, Thread 2 einen Lock auf v2, und anschließend warten beide Threads, bis der jeweils andere diesen Lock wieder freigibt. Auf der Labshell läuft das Programm. Dieser Deadlock tritt nur auf, wenn Thread 1 und Thread 2 wirklich absolut parallel laufen.
32
+
33
+4. Helgrind gibt mir viele Informationen zur Lockreihenfolge. Es sagt, dass es durch das Festlegen des ersten Locks eine feste Reihenfolge gibt, in der neue Locks gesetzt werden müssen. Zusätzlich bekomme ich die Information, wo die Reihenfolge festgelegt wird und wo sie nicht eingehalten wird.
34
+
35
+5. Blah
36
+
37
+    1.
38
+
39
+    2.
40
+
41
+    3.
42
+
43
+    4.
44
+
45
+6.
46
+
47
+7. Blah
48
+
49
+    1.
50
+
51
+    2.
52
+
53
+8. Blah
54
+
55
+    1.
56
+
57
+    2.
58
+
59
+9.

+ 1
- 1
hw8/simu1/main-race.c Ver fichero

@@ -5,7 +5,7 @@
5 5
 int balance = 0;
6 6
 
7 7
 void* worker(void* arg) {
8
-    balance++; // unprotected access
8
+    //balance++; // unprotected access
9 9
     return NULL;
10 10
 }
11 11
 

Loading…
Cancelar
Guardar