Automatische Thread-Synchronisation

Werden mehrere Abarbeitungspfade (Threads) innerhalb eines Prozesses verwendet, sind Maßnahmen zur Thread-Synchronisation notwendig, um Wettlaufsituationen (Race Conditions) auf gemeinsam genutzte Ressourcen (meist Speicher) zu verhindern.

Das ThreadStatic-Attribut

Normale statische Variablen existieren nur einmal pro Prozess. Wenn diese zur Speicherung konstanter Werte dienen, ist es in den meisten Fällen kein Problem, wenn mehrere Threads gleichzeitig darauf zugreifen.

Ist es hingegen sinnvoll, pro Thread eine eigenständige Variable zu benutzen, um Wettlaufsituationen von vornherein zu vermeiden, können statische Variablen mit dem ThreadStatic-Attribut gekennzeichnet werden. Derartige Variablen werden automatisch pro Thread erzeugt.

[ThreadStatic]
static StringBuilder m_SB;

Auf eine Inline-Initialisierung sollte verzichtet werden, da diese nur einmal für den Hauptabarbeitungspfad (Main Thread) durchgeführt wird. Stattdessen empfiehlt sich die Kapselung der Variablen. Der Zugriff kann dann über eine statische Eigenschaft erfolgen, die automatisch für die notwendige Initialisierung sorgt.

protected StringBuilder SB
{
  get
  {
    if(m_SB==null)
      m_SB=new StringBuilder();

    return m_SB;
  }
}

Nicht mehr benötigte Instanzen werden vom Garbage Collector automatisch freigegeben. Instanzen, die eine explizite Freigabe benötigen, also beispielsweise IDisposable implementieren, sollten nicht in diesem Zusammenhang verwendet werden, da keine kontrollierte, explizite Freigabe möglich ist.

Ähnliche Artikel

Schreiben Sie einen Kommentar