threads und zugriff auf datenbank



  • Hi,

    es ist noch ein weiter Weg bis ich threads verstehe (und auch die Grundlagen von C++)..
    aber mich würde mal interessieren

    threads laufen zur selben zeit. wenn ich nun in beiden threads in die selbe mysql tabelle schreibe könnte es ja passieren das ein thread nicht schreiben kann? (die datenbank kaputt macht, der computer runterfährt,... weiß was ich 🙂

    oder ist von haus aus eine sperre drin und der thread wartet bis er schreiben kann?

    so.. genug fragen.. wünsch euch eine angeneme nacht 😉



  • Wenn du dich mit einem MySQL-Server verbindest, dann sollte der dafür sorgen, dass mehrere gleichzeitig gestellte Anfragen korrekt abgearbeitet werden (das besagt das I in ACID).



  • logisch so sollte es ja sein bsp. webseite.. dachte nur das threads sich hier anders verhalten 🙂

    danke, da bin ich jetzt aber erleichtert ^^


  • Administrator

    Wobei du natürlich aufpassen musst, wie die Datenbank funktioniert. Eine SQLite3 Datenbank ist zum Beispiel nicht threadsicher. Da kann es zu Race Conditions kommen. Daher solltest du mit einem mutex (bzw. guard, lock, semaphore, monitor usw.) den Zugriff auf die Datenbank sichern. Dabei dann aber wiederrum aufpassen, dass du keinen Deadlock machst.
    Auch könnte es gefährlich sein, wenn du bei einer Datenbank die gleiche Verbindung für mehrere Threads verwendest. Müsste man für die einzelnen Datenbank nachschauen.

    Im übrigen, mehrere Zugriffe auf einen Server erzeugen normalerweise mehrere Threads, üblicherweise für jeden Client einen Thread im HTTP Server Programm 😉

    Naja, ich hoffe mal, du hast jetzt genügend Stichwörter für eine gründlichere Suche bekommen. Ganz so einfach ist es schon nicht, wie es Athar dargestellt hat. Ich muss allerdings zugeben, dass ich dafür keine Buchempfehlung abgeben kann, da ich kein Buch kenne, welches diese Thematik behandelt. Wäre aber noch nett, habe mir das äusserst mühsam über die Zeit selber beigebracht mit vielen Stolperfallen 😃

    Grüssli



  • SQLite3 ist soweit ich weiss thread-safe wenn man SQLITE_THREADSAFE definiert und verschiedenen Connections für die verschiedenen Threads verwendet.


  • Administrator

    hustbaer schrieb:

    SQLite3 ist soweit ich weiss thread-safe wenn man SQLITE_THREADSAFE definiert und verschiedenen Connections für die verschiedenen Threads verwendet.

    Das ist korrekt, aber soweit ich weiss, wird SQLite3 nicht per Standard mit diesem Makro kompiliert. Schlussendlich läuft es dann aber wieder auf diesen Satz hinaus:

    Dravere schrieb:

    Müsste man für die einzelne Datenbank nachschauen.

    Grüssli



  • mhh warum bekomm ich keine antwort emails 😕 😕

    bei der datenbank handelt es sich um eine mysql db. nach meinem kenntnissstand kommen die von haus aus mit mehreren anfragen zurecht, müsste ich aber zur Sicherheit nochmals recherchieren

    Auch könnte es gefährlich sein, wenn du bei einer Datenbank die gleiche Verbindung für mehrere Threads verwendest.

    pro thread baue ich jeweils getrennt eine verbindung auf (so wie wenn mehrere nutzer eine webseite aufrufen).
    was passieren würde wenn mehrere benutzer ein und die selbe verbindung nutzen würde möchte ich gar nicht wissen 😉



  • taurus schrieb:

    was passieren würde wenn mehrere benutzer ein und die selbe verbindung nutzen würde möchte ich gar nicht wissen 😉

    kommt auch auf die DB library an. gibt welche denen das gar keine probleme macht. gibt welche die dann zahnräder spucken.


Anmelden zum Antworten