ich konnte mich nicht ganz zwischen Web Development und General Coding entscheiden, falls ich hier falsch bin bitte verschieben
Und zwar habe ich ein theoretisches Problem welches ich nicht selber recherchieren konnte auf Grund fehlender Suchbegriffe.
Ich habe eine mysql Tabelle mit einem Pool an Werten, die zweite Spalte gibt an, wem dieser Wert zugeordnet ist. Ist die zweite Spalte = null, so ist dieser Wert noch nicht zugeordnet und kann noch vergeben werden.
Nun habe ich zwei SQL Verbindungen die zu genau dem gleichen Zeitpunkt eine Query abschicken um einen freien Wert aus dem Pool zu nehmen und diesen zuzuordnen.
Als Beispiel wird das ganze mit zwei Querys pro Verbindung umgesetzt
Query 1: Liefere mir einen freien Wert
Query 2: Ordne xy dem Wert zu
Im optimalfall läuft das so:
| Zeitpunkt | Aktion |
|---|---|
| t0 | Verbindung 1 fordert freien Wert aus Wertepool |
| t1 | Verbindung 1 erhält ID von freiem Wert (z.B. 10) |
| t2 | Verbindung 1 führt update statement auf ID 10 aus und ordnet den Wert zu Verbindung 1 zu |
| t0 | Verbindung 2 fordert freien Wert aus Wertepool |
| t1 | Verbindung 2 erhält ID von freiem Wert (z.B. 11) |
| t2 | Verbindung 2 führt update statement auf ID 11 aus und ordnet den Wert zu Verbindung 2 zu |
Was aber, wenn der Scheduler ungünstig zwischen den Threads switcht und das ganze dann so aussieht:
| Zeitpunkt | Aktion |
|---|---|
| t0 | Verbindung 1 fordert freien Wert aus Wertepool |
| t1 | Verbindung 1 erhält ID von freiem Wert (z.B. 10) |
| t2 | Verbindung 2 fordert freien Wert aus Wertepool |
| t3 | Verbindung 2 erhält ebenfalls freie ID 10, da noch keine Zuweisung von Verbindung 1 stattgefunden hat |
| t4 | Verbindung 1 führt update statement auf ID 10 aus und ordnet den Wert zu Verbindung 1 zu |
| t5 | Verbindung 2 führt update statement auf ID 10 aus und ordnet den Wert zu Verbindung 2 zu |
Ende vom Lied wäre ein Überschreiben der Zuweisung für Verbindung 1 und somit ein kritischer Fehler
Falls sich hier jemand mit thread sicheren DB programmen auskennt wäre ich über Hilfe sehr dankbar.
Normal würde man ja sowas mit semaphoren/mutexen umsetzen aber bei DB Operationen bin ich bei sowas echt ratlos...






