Schrift
[thread]8240[/thread]

dbi-handler an threads übergeben



<< >> 2 Einträge, 1 Seite
n0bbi
 2006-08-15 09:30
#68950 #68950
User since
2006-07-06
1 Artikel
BenutzerIn
[default_avatar]
Hallo Community,

ich versuche gerade auf diese Art und Weise einen neuen Thread zu erzeugen.
Code: (dl )
1
2
my $sub1 = threads->create( \&unterfunktion);
$sub1->join();

In diesem will ich nun auf eine Datenbank zugreifen, allerdings steigt er dann mit folgender Fehlermeldung aus:
Quote
thread failed to start: DBD::mysql::db prepare failed: handle 2 is owned by thread 8170008 not current thread 8373308 (handles can't be shared between threads and your driver may need a CLONE method added) at ./start.pl line 199, <SYSTEM2> line 9.

Einfach den handle übergeben funktioniert leider nicht.

Gibts da irgendwie eine Möglichkeit das zu bewerkstelligen? Oder müsste ich in jedem Thread einen eigenen Connect machen? (Es kommt hier auf die Geschwindigkeit an!)

Vielen Dank schon mal

Gruß
n0bbi
ich
 2006-08-19 03:39
#68951 #68951
User since
2003-09-19
120 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

um Variabeln, Arrays und Objekte von Eltern und Kindprozess gleichzeitig benutzen zu können gibt es das Module CPAN:threads::shared.
Allerdings kannst du damit auch keine Datenbankverbindung teilen.

Die Sache ist die, das durch einen "Fork" (erzeugung eines neuen Threads) das Daten- und Stacksegment und der Heap des Elternprozesses kopiert wird. Beide Prozesse fahren dann mit unterschiedlichen Instruction Pointern weiter. D.H. Die Variablen (Scalare, Arrays, ... Objekte) heißen zwar noch gleich, zeigen aber auf unterschiedliche Speicherbereiche.

Das Eltern und Kindprozess die gleichen Speicherbereiche verwenden braeuchte man die Funktion "clone", die es allerdings nicht auf jedem System gibt und ich weiss auch nicht ob man diese mittels dem "threads"-Module aufrufen kann.

Die Netzwerkverbindung die das MySQL / DBI Objekt offen hat überlebt so einen "fork" nicht (die Netzwerkverbinung geht verloren).

Wenn es doch gehen sollte wäre ich für eine Antwort dankbar :)

Gruss
Jan
If you tell the truth you don't have to remember anything.
-- Mark Twain
<< >> 2 Einträge, 1 Seite



View all threads created 2006-08-15 09:30.