Lokale Thread-Variablen

Aus RAD Studio (Deutsch)
Wechseln zu: Navigation, Suche

Nach oben zu Thread-Objekte definieren - Index

Die Thread-Funktion und alle von ihr aufgerufenen Routinen besitzen, ebenso wie alle anderen Delphi-Routinen, eigene lokale Variablen. Diese Routinen können außerdem auf globale Variablen zugreifen. Globale Variablen bieten einen leistungsfähigen Mechanismus zur Kommunikation zwischen den Threads.

In bestimmten Situationen müssen Variablen verwendet werden, die für alle Routinen in einem Thread global sind, aber nicht mit anderen Instanzen derselben Thread-Klasse gemeinsam genutzt werden sollen. Dies lässt sich über die Deklaration von Variablen erreichen, die innerhalb des Threads lokal sind. Dazu werden die Variablen in einem threadvar-Abschnitt (Delphi) oder durch das Hinzufügen des Modifizierers __thread (C++) deklariert. Beispiel:



 threadvar
 x: integer;



 int __thread x;



Hier wird eine Integer-Variable deklariert, die aus Sicht anderer Threads der Anwendung als privat gilt, jedoch innerhalb des Threads global sichtbar ist.

Der threadvar-Abschnitt kann nur mit globalen Variablen verwendet werden. Bei Zeigern und Funktionen ist diese Art der Deklaration nicht möglich. Typen , bei denen ein Schreibzugriff einen Kopiervorgang impliziert, wie lange Strings, können nicht als Thread-Variablen deklariert werden.

In C++ erfordern die folgenden Deklarationen eine Initialisierung zur Laufzeit und sind deshalb nicht zulässig:



 int f();
 int __thread x = f( );   // Nicht zulässig



Die Instantiierung einer Klasse mit einem benutzerdefinierten Konstruktor oder Destruktor erfordert ebenfalls die Initialisierung zur Laufzeit und ist deshalb nicht zulässig:



 class X {
 	X();
 	~X( );
 };
 X __thread myclass;			// illegal



Siehe auch

In anderen Sprachen