Benutzer mit den meisten Antworten
Multithreading - allgemeine Frage

Frage
-
Hallo und guten Tag,
in der Dokumentation (Monitor.TryEnter) findet sich folgendes Codebeispiel:
...
// Lock the queue and dequeue an element. public T Dequeue() { T retval; // Request the lock, and block until it is obtained. Monitor.Enter(m_inputQueue); try { // When the lock is obtained, dequeue an element. retval = m_inputQueue.Dequeue(); } finally { // Ensure that the lock is released. Monitor.Exit(m_inputQueue); } return retval; }
Verständnisfrage:
Ist folgendes Szenario vorstellbar:
Thread 1 hat Monitor.Exit gerade abgearbeitet und bevor "retval" zurückgegeben
wurde (also zwischen den beiden Schritten) ruft ein zweiter Thread die Methode
auf und nullt retval mit der Konsequenz, dass Thread 1 "null" liefert?Oder hat "retval" bei jedem Eintritt in die Methode in jedem Fall eine eigene "Instanz"?
Gruß
Klaus- Bearbeitet K. Pater Freitag, 12. Juni 2015 09:59
Antworten
-
Hi Klaus,
retval ist eine Verweisvariable, die bei jedem Eintritt in die Methode "Dequeue" im Stack angelegt wird. Das bedeutet, dass jeder Aufruf der Methode "Dequeue" einen separaten Zeiger in der Variablen "retval" enthält. Um zu verhindern, dass Zeiger verloren gehen, muss der Aufruf der Methode "Dequeue" richtig passen.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Peter Fleischer Freitag, 12. Juni 2015 11:42
- Als Antwort markiert K. Pater Freitag, 12. Juni 2015 12:16
-
Hi Klaus,
T muss zum Typ der Objekte in "m_inputQueue" passen. Aus diesem Grund ist die Typisierung der Methode ohne den genauen Hintergrund zu kennen, fragwürdig.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Peter Fleischer Freitag, 12. Juni 2015 11:42
- Als Antwort markiert Aleksander Chalabashiev Freitag, 12. Juni 2015 14:58
Alle Antworten
-
Hi Klaus,
retval ist eine Verweisvariable, die bei jedem Eintritt in die Methode "Dequeue" im Stack angelegt wird. Das bedeutet, dass jeder Aufruf der Methode "Dequeue" einen separaten Zeiger in der Variablen "retval" enthält. Um zu verhindern, dass Zeiger verloren gehen, muss der Aufruf der Methode "Dequeue" richtig passen.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Peter Fleischer Freitag, 12. Juni 2015 11:42
- Als Antwort markiert K. Pater Freitag, 12. Juni 2015 12:16
-
Hi Klaus,
T muss zum Typ der Objekte in "m_inputQueue" passen. Aus diesem Grund ist die Typisierung der Methode ohne den genauen Hintergrund zu kennen, fragwürdig.--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks- Als Antwort vorgeschlagen Peter Fleischer Freitag, 12. Juni 2015 11:42
- Als Antwort markiert Aleksander Chalabashiev Freitag, 12. Juni 2015 14:58