Threadprogrammierung mit Variablen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Miko hat geschrieben:und wenn ein thread schreibt und einer liest dürfts doch keine probleme geben oder?
Doch, die gibt es. Irgendwo in diesem Thread ist schon der Begriff "Race Condition" gefallen, such einfach mal danach.
Miko

Sorry ich kann mit dem Begriff nichts anfangen.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Miko hat geschrieben:Sorry ich kann mit dem Begriff nichts anfangen.
Sind Wikipedia und Google wirklich so schwer zu bedienen...?
Miko

ich bin ja großer fan von sufus und suchmaschinen.
aber wozu sind dann solche foren da?
Ich kann alles bei google eintippen warum gibts dann python-forum.de?

In den letzten Jahren hat es sich wirklich dazu entwickelt dass solche foren nicht mehr als Plattform dienen sein wissen zu teilen sondern mehr als chatplatform für stammgäste und wenn jemand anderes mal was postet wird das ausgeschlachtet und geschrieben "Sufu benutzen".

Dann sollte das forum vielleicht besser geschlossen werden und ein text erscheinen "Bitte google benutzen"
BlackJack

Da tust Du diesem Forum unrecht. Ein einfaches "Ist Google heute kaputt" oder "RTFM" kommt hier *sehr* selten als Antwort.

Leonidas hat in Dir *in diesem Thread* erklärt was eine "race condition" ist. Und Rebecca hat gleich im nächsten Beitrag noch ein einfacheres, verständlicheres Beispiel dafür nachgeschoben.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Miko hat geschrieben:aber wozu sind dann solche foren da?
Um dir bei Problemen zu helfen, die du nicht mit Hilfe von $SUCHMASCHINE loesen kannst.

Sieh es doch mal so: Warum sollte jemand n Minuten seiner Zeit opfern, um hier etwas zu schreiben, was sowieso schon viel besser bei Wikipedia oder woanders steht?
Miko

klar rebecca seh ich auch so. Aber nahezu alles lässt sich irgendwo im internet finden. somit müsste man mindestens 95 % der Threads in diesem Forum hier löschen. Weil irgendwo stehts immer!

Oh stimmt, Leonidas hats erklärt. Hab den Begriff der mir fremd war wahrscheinlich überlesen oder nicht behalten.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Du hast den Wert 95% ind en Raum gewurfen ;-)

Dann behaupte ich mal 95% der Suchanfragen zum Thema Python mit deutscher Fragestellung führen in dieses Forum ;-)

Ich finde das Thema ja hochinteressant muss ich sagen also mal ne kleine zwischen Frage von mir) :

man kann doch das verändern von variablen einem eigenen thread als aufgabe geben. und mit do = 1 wird gesetzt wenn der thread etwas tut ersrt wenn do wieder auf 0 gestezte wird ( nach abschluss der aufgabe ) kann der thread neue aufgaben annehmen.
dadurch kann kein gleichzeitiges aändern vorkommen. vll kann man auch befehle in eine warteschlange packen und nach der ausführung löschen. diese warteschlange muss dann jedoch nach eingangsreihenfolge abgearbeitet werden.
Miko

@ Sr4l:
Dabei umgehst du aber das Problem wieder nicht. Laut den obigen Aussagen wechselt der Prozessor so häufig und schnell zwischen den Threads, dass do noch nicht im Arbeitsspeicher auf 1 gesetzt ist aber der 2te Thread schon anfange will die Variable zu ändern. Und dann ändern wieder beide Threads die Variable und einer überschreibt das Ergebniss des anderen (was noch aktzeptabel wär) oder das Programm stürzt ab.
Benutzeravatar
smuerf
User
Beiträge: 3
Registriert: Donnerstag 29. November 2007, 11:08
Wohnort: Chemnitz

Weil hier ja allerhand Spekulationen zu gemeinsam genutzten Datenstrukturen ausgetauscht werden und da doch einiges nicht so klar zu sein scheint, hier meine Einschätzung:
Mit Threads handelt man sich leicht Inkonsistenzen ein!!! vor allem wenn man gemeinsam genutzte Variablen verwendet. Aber gerade das ist ja der Vorteil von Thraeds gegenüber zum Beispiel Prozessen. Man kann gemeinsame Variablen nutzen, das ist schnell und spart Speicherplatz!
Jetzt kommt der Haken: Man muss die gemeinsamen Variablen natürlich aber vor (pseudo)gleichzeitigem Schreibzugriff sichern! Das macht man mit Locks. Soweit sogut :)
Jetzt muss man für sich selbst entscheiden wie gut man sich mit (Pseudo)Parallelität auskennt. Wer sich nicht gut auskennt sollte auf Datenstrukturen, die erprobt und verifiziert sind, zurückgreifen und darüber, und nur darüber, auf seine gemeinsamen Variablen zugreifen! Wer meint es besser zu wissen kann natürlich versuchen ein wenig mehr Performance durch selbst verwaltete Locks aus dem Programm herauszuholen. Aber Vorsicht, wie schon erwähnt, wenn das Programm nur lange genug läuft und es kommt zu einer sogenannten "write violation" Schreibzugriffs-Inkonsistenz, ist das ganze Ergebnis des Programms womöglich nicht mehr brauchbar. Das nützt dann erst recht keinem was.

Also entscheide dich: Willst du mit wenig Aufwand ein Programm, was definitiv funktioniert, dann nutzte erprobte Datenstrukturen! Willst du etwas mehr Performace, dann investiere viel Zeit und schreibe dir deine eigenen Strukturen!

Ich hoffe ich habe das klargestellt :D
Angenommen wir würfeln das Ergebnis aus:
Welche Güte können wir dabei erreichen? ;-)
Antworten