Zum Inhalt springen
L

Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).

Multithreading in C++ [010] - Race Conditions

Brotcrunsher6:32 2.674 Aufrufe veröffentlicht Auf YouTube

Das Wichtigste aus dem Video

Tipp auf eine Zeit – das Video springt genau dorthin.

Transkriptautomatisch erstellt · 42 Zeilen
Herunterladen
  1. halli hallo und dieser episode schauen wir uns mal an was denn da eigentlich passiert es in der letzten episode warum das so passiert ist die lösung wie wir
  2. das ganze dann lösen können das können wir uns in der nächsten episode an und zwar handelt es sich bei beidem und sogenannte race conditions das sind
  3. negative effekte die man bei wenn man nicht aufpasst beim multi threading auf jeden fall haben kann gucken wir uns das erste beispiel mal an
  4. also wir haben oben dieses intervall es gleich null und haben hier eine schleife weil wall kleiner 400.000 wird dieses mal eben in kommentiert so so sieht es
  5. aber eigentlich wenn wir es dann ausführen ja gar nicht aus in wirklichkeit haben wir davon 16 stück ich zeichne hier jetzt einfach mal nur
  6. zwei stück hin und wenn wir jetzt das mal genauer angucken dann in kommentieren die schön fröhlich vor miteinander hier die zahl hoch und
  7. irgendwann hat diese dieses value da oben zb 99 1999 also diesen wert und dann überprüfen beides reds hier ist wohl kleiner 100.000 und beide kommen zu
  8. dem schluss ja es ist kleiner als 100000 also in kommentieren beide einfach den fährt und dann kommen wir hier auf 100.000 1 also ein update zu viel
  9. das ist natürlich jetzt erstmal ein problem wir müssten also irgendeine möglichkeit finden dass sich verschiedene sets wie
  10. das synchronisieren können und dass sie wirklich beide den gleichen wert in kommentieren oder irgendwie lesen aber dass gleichzeitig im nah geht es ganz
  11. genau im detail funktioniert gucken wir uns dann wie gesagt in der nächsten episode an da geht es dann um so genannte mew texas
  12. und das ist dann die lösung für dieses problem jetzt ist dieser effekt aber auch natürlich nicht immer so also manchmal haben wir ja das letzte mal
  13. gesehen ist es auch wirklich 100000 also genau dies das was wir haben wollen und wenn es so abhängig ist in welcher reihenfolge des rats laufen was wir ja
  14. nicht steuern können direkt dann spricht man von einer race condition also in welcher reihenfolge etwas es kann auch race conditions in
  15. programmen geben die jetzt nicht wirklich schlimm sind wenn man zum beispiel auf eine kuh irgendwas drauf pusht dann kann es manchmal egal sein ob
  16. erste eines red pusht und dann der andere oder andersrum ja das kommt dann auf konkrete problem an
  17. wenn man zum beispiel eine kuh macht was noch alles abgearbeitet werden muss von irgendeinem anderen worker fred dann ist es meistens egal in welcher reihenfolge
  18. da zwei tags darauf landen muss aber nicht sein also auch das kann man für probleme sorgen kommt eben wie gesagt auf das detail dann aber wenn wir jetzt
  19. hier von race condition sprechen innerhalb von dieser serie dann meine ich damit immer negative race conditions also etwas was man nicht haben möchte
  20. in so einem programm das nächste beispiel das war aber ja noch ein bisschen krasser hier haben wir ja diese vor schleife in die gleich null und
  21. kleiner 10.000 und das haben wir dann in zehn tracks gestartet und da kam dann nicht hunderttausend raus sondern es kam nur 33.000 euro beziehungsweise ich
  22. glaube es fehlt jetzt eine null aber ja der effekt ist der gleiche das liegt daran dass dieses wall + + also dieses implementieren von wall ist
  23. gar nicht so harmlos und kleiner mini befehl wie man zunächst vielleicht denken mag sondern dieses wall besteht eigentlich aus direkt drei befehlen also
  24. das implementieren von wahl und zwar aus erstens lade den wert von weil wir momentan ist dann inkrementelle diesen wert also erhöhen um 1 und dann schreibt
  25. diesen wert wieder zurück in wald und da mal genau das problem sagen wir mal ganz am anfang sind alle trades also die stadt einmal alle exakt
  26. gleichzeitig dass es da ein bisschen unrealistisch aber sagen wir mal sie starten alle gleichzeitig dann laden die ja alle den wert 0 rein dann erhöhen sie
  27. alle auf wert 1 und dann schreiben sie alle den wert 1 zurück das heißt jeder von diesen trends eigentlich sollte jetzt zehn rauskommen aber jeder von
  28. diesen fritz hat auf 1 erhöht und es kann sogar noch schlimmer sein wenn ein schreibt bereits zum beispiel bei 1000 ist dann will er eigentlich um 1 erhöhen
  29. auf 1001 und jetzt fängt erst anderes red an ja er hat zum beispiel den wert schon gelesen als er hat schon ein bisschen davor angefangen er hat
  30. schon den wert null ganz am anfang gelesen in kommentierten um 1 und ist jetzt plötzlich wieder bei 1 also es kann sogar sein dass wieder
  31. zurückgegangen wird weil ein anderer fred noch nicht so weit war ja und da spricht man dann von sogenannten lost updates lost updates sind auch wieder
  32. race conditions aber eben eine besondere art von race condition so das was ich gerade er erzählt habe mit diesen drei schritten was so ein instrument
  33. eigentlich ist wird noch verstärkt zusätzlich durch eine andere optimierung von cpu es die uns bei multi threading aber einen strich durch die rechnung
  34. macht und zwar kann eine cpu sagen dass diese beiden schritte von diesem inkrementell nicht immer ausgeführt werden sollen
  35. zum beispiel kann sie sagen okay am anfang wird 0 geladen und dann mache ich sechzehn mal den schritt 2 also in kommentiere diesen wert 16 mal um
  36. jeweils 1 wenn er dazu bei 16 und erst dann schreibe ich wieder zurück und solange in dieser zwischenzeit habe ich das nur noch nicht wieder zurück in den
  37. arbeitsspeicher geschrieben sondern habe das ganze noch im cache das ist ein zusätzlicher speicher der jetzt nicht im arbeitsspeicher ist sondern noch näher
  38. an der cpu noch schneller deswegen ist es eine optimierung eigentlich bei single threaded macht es uns auch überhaupt keine probleme dass
  39. es eben nicht direkt immer alles zurück schreibt sondern es behält das ganze eventuell noch im cache und arbeitet dort damit weiter ohne es zurück zu
  40. schreiben in den arbeit ba aber wenn wir jetzt mit multi threading arbeiten dann haben wir da ein problem denn jetzt ist es eben so dass der dieses was wir nicht
  41. zurück geschrieben haben nicht gelesen werden kann von den anderen fans sondern nur von einem verlag der es ursprünglich eben hat und noch nicht zurück
  42. geschrieben hat so und das sind race konditions und wie man die beheben wie gesagt guck man es jetzt gleich in der nächsten episode an

Zum Nachlesen