Domino 9 und frühere Versionen > ND6: Administration & Userprobleme

Semaphore

<< < (2/7) > >>

Ralf_M_Petter:
Jein, soweit ich Windows verstehe sollte die ersten Stellen der ThreadId vor dem Dopelpunkt der PID entsprechen. Insofern solltest du zumindest den Prozess herauskriegen, der dein Problem verursacht. Ein Thread ist eine Unterteilung eines Prozesses. Lies sonst mal in der Wikipedia nach. Eventuell helfen auch die Tools von Sysinternals.

Grüße

Ralf

P.S. Meiner Meinung nach ohne einen Flamewar starten zu wollen, ein gravierender Nachteil von Windows, dass es keine vernünftigen Boardmittel gibt um die laufenden Prozesse zu überwachen.

ebse:
Ok ich werd mir dann morgen nachdem der Server neu gestartet wurde das SEMDEBUG File anschauen und mich dann evtl. nochmal melden!!

DANKE NOCHMAL!!

smoki:
Threads laufen parallel auf dem Rechner, ähnlich wie Prozesse.

Im Prinzip besteht jeder Prozess aus mindestens einem Thread. Der Vorteil von Threads ist, dass diese sich innerhalb eines Prozesses den Speicherbereich und die Umgebung (Umgebungsvariable, Userkennung usw.) teilen und verschiedene Teilaufgaben parallel verarbeiten können.

Durch Threads, kann ein Prozess mehrere Aktionen gleichzeitig durchführen, ohne diese Sequenziell abarbeiten zu müssen. Zum Beispiel wartet ein Thread auf die Ergebnisse von der Festplatte, während der andere schon die nächste Usereingabe abfragen kann und ähnliches.

Da sich die Threads einen Speicherbereich teilen, muss unbedingt verhindert werden, dass diese Parallel den gleichen Speicherbereich beschreiben. Die Kommunikation der Threads läuft meistens über Speicherbereiche, die sich die Threads teilen. Diese Bereiche kann sich ein Thread mit einem Mutex oder einer Semaphore kurzzeitig(hoffentlich...) für sich beanspruchen und die anderen Threads warten (bleiben stehen...Suspend), wenn diese nun auch diesen Bereich auch lesen oder bearbeiten wollen.

Problematisch wird es beispielsweise, wenn ein Prozess zwei Threads mit zwei Speicherbereichen hat und nun gliechzeitig folgendes passiert:

Thread 1 nimmt sich nun den Speicherbereich 1
Thread 2 nimmt sich nun den Speicherbereich 2

anschließend wollen beide (praktisch gleichzeig) folgendes tun:

Thread 1 will nun auch Speicherbereich 2 haben
Thread 2 will nun Speicherbereich 1 haben

Jetzt warten die beiden Threads endlos aufeinander (Suspended) und es entsteht ein Dead-Lock!

Um solche Probleme zu verhindern, gibt es verschiedene Ansätze. Der einfachste Ansatz ist, dass es eine festgelegte Reihenfolge gibt, nachdem Gelocked wird. D. h. wenn ein Thread mehrere Speicherbereiche haben möchte, reserviert er diese immer Aufsteigend (oder Absteigend... egal... hauptsächlich einheitlich) . Leider ist dieser Ansatz in der Praxis schwer durchzuhalten oder einer der Programmierer kannte diese Vorgabe nicht und tut es eben falsch.

Ich hoffe, das erklärt es (vereinfacht) in Grundzügen.

Gruss
Chris

Ralf_M_Petter:
Sehr gute Beschreibung eines Deadlocks. Nur tritt hier offensichtlich nicht ein Deadlock auf, da soweit ich es verstanden habe nach einiger Zeit die Timeouts wieder aufhören. Eventuell kann das der Ursprungposter nocheinmal präzissieren.

Grüße

Ralf

smoki:
OK.... ergänzend. Der Timeout entsteht, wenn der Thread zu lange wartet (bsp. 30 Sekunden), dadurch wird ein Endlos langer Dead-Lock verhindert. Und ja es kann auch entstehen, wenn ein Thread eine Ressource zu lange bearbeitet. z. B. View-Index neu aufbaut. (Wurde weiter oben ja schon mal erwähnt...) :)

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln