ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
589
589
EMPFEHLEN
-
Hallo,
Hach das Leben ist nicht einfach =D...
Ich schreibe gerade eine Applikation, in der intensiv Multithreading verwendet wird. Zuerst eine Verständnisfrage. Nehmen wir folgende Situation an:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
private static readonly object padlock = new object(); private void ThreadSafeMethode() { lock(padlock) { for(...) { this.SomeMethod(); } } } private void SomeMethod() { //some actions }
Die obere Methode wird nun synchronisiert ausgeführt. Meine Frage ist nun, ob ich das richtig verstehe, dass die untere Methode unter Umständen nicht threadsicher ist.
Meine zweite Frage hat etwas mit der oberen zu tun.
Ich arbeite mit den System.Data.SqlClient um in Threads Daten abzufragen. Von Zeit zu Zeit kriege ich die Exception, dass mehrere Datareads gleichzeitig auf einer Verbindung ausgeführt wurden (was ja nicht verwunderlich ist, da die Threads sich überschneiden können). Wie kann ich dies verhindern. Doch nicht jedem Thread eine eigene Connection geben oder?
Gruss Alexander
-
Hallo kahuna!
Ganz gewiss.Meine Frage ist nun, ob ich das richtig verstehe, dass die untere Methode unter Umständen nicht threadsicher ist.
Es können DeathLocks oder halt skurile Exceptions entstehen,
wenn versucht wird von mehreren Threads aus gleichzeitig auf ein Objekt zuzugreifen.
Du kannst dein DB Objekt via Singleton überall verfügbar machen und den Zugriff darauf Synchronisieren.
Das lock Statement repräsentiert die Methoden
Monitor.Enter( obj ) und Monitor.Exit( obj ). Innerhalb dieses Blocks wird sichergestellt,
dass immer nur ein Prozess zugriff auf die Objekte innerhalb der Methode hat.
Singelton - Post
MfG,
cosmoMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Wenn ich nun aber bewusst will, dass mehrere Threads gleichzeitig die Datenbank abfragen können, wie bewerkstellige ich dies?
Gruss Alexander
-
So was hab ich noch nicht gemacht. Vielleicht ist es mit merheren Connections möglich.
Aber das sollte lieber jemand beantworten der mit mehrerern gleichzeitigen DBZugriffen Erfahrung hat.
Es können da aber wahrscheinlich Inkonsistenzen enstehen, wenn Du Werte reinschreibst,
die wiederum von einem deiner anderen Thread benötigt werden.
Aber wie gesagt ich hab mich bisher immer nur auf eine Connection zu einer DB beschränkt.
Was musst den für riesige Datenmengen umsetzen, wenn man mal fragen darf?MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
wenn du den thread in eine eigene klasse packst:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
class Worker { private MySqlConnection con = null; public Worker() { con = new MySqlConnection(connectionString); con.Open(); Thread workerThr = new Thread(new ThreadStart(run)); workerThr.start(); } private void run() { //hier kannst du jetzt auf con deine datenbank aktionen durchfuehren //da jeder thread seine eigene Verbindung hat } }
und einen neuen Thread startest du jetzt indem du einfach aus deinem Hauptprogramm ein neues Worker object erstellst
In den Worker kommt dann auch deine ganze logik rein, was der thread machen soll...
hoffe, das hat geholfen
Ähnliche Themen
-
Testfrage bzgl. generic methods / Typparameter
Von Steve222 im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 08.09.10, 22:33 -
First Class Methods in Java
Von Thomas Darimont im Forum JavaAntworten: 3Letzter Beitrag: 26.02.08, 09:59 -
c# 3.0 Support für MethodChaining mit Extension Methods und Lambda Expressions
Von Thomas Darimont im Forum .NET CaféAntworten: 0Letzter Beitrag: 05.02.08, 11:53 -
Bridge Methods
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 20.06.06, 11:14 -
eclipse Fehlermeldung: obsolete methods
Von helavi im Forum JavaAntworten: 2Letzter Beitrag: 25.08.04, 21:21





Zitieren
Login





