Initializing ThreadStatic fields

May 17th, 2008 at 1:23 pm by stj

Yesterday a friend of mine came across a problem concerning the initialization of ThreadStatic fields. He always encountered a NullReferenceException while accessing those fields.

Here's a sketch of what he tried to do:

C#:
  1. class Program
  2. {
  3.     [ThreadStatic]
  4.     static StringBuilder aValue = new StringBuilder();
  5.  
  6.     static void Main(string[] args)
  7.     {
  8.         Program p = new Program();
  9.         ThreadStart ts = new ThreadStart(p.RunThread);
  10.         Thread t1 = new Thread(ts);
  11.         Thread t2 = new Thread(ts);
  12.         t1.Start();
  13.         t2.Start();
  14.     }
  15.  
  16.     void RunThread()
  17.     {
  18.         Console.WriteLine(Program.aValue.ToString());
  19.     }
  20.  
  21. }

Everytime the program executed RunThread() the NullReferenceException has been raised. Therefore the question was why the field aValue didn't get initialized.

As usally a note at .Net Framework Reference has an answer to this question:

Do not specify initial values for fields marked with ThreadStaticAttribute, because such initialization occurs only once, when the class constructor executes, and therefore affects only one thread. If you do not specify an initial value, you can rely on the field being initialized to its default value if it is a value type, or to a null reference (Nothing in Visual Basic) if it is a reference type.

So, next question: How to initialize ThreadStatic fields?

We decided to encapsulate the initialization in a property:

C#:
  1. class Program
  2. {
  3.     [ThreadStatic]
  4.     static StringBuilder aValue;
  5.  
  6.     static StringBuilder AValue
  7.     {
  8.         get
  9.         {
  10.             if (null == aValue)
  11.                 aValue = new StringBuilder();
  12.             return aValue;
  13.         }
  14.     }
  15.  
  16.     static void Main(string[] args)
  17.     {
  18.         Program p = new Program();
  19.         ThreadStart ts = new ThreadStart(p.RunThread);
  20.         Thread t1 = new Thread(ts);
  21.         Thread t2 = new Thread(ts);
  22.         t1.Start();
  23.         t2.Start();
  24.     }
  25.  
  26.     void RunThread()
  27.     {
  28.         Console.WriteLine(Program.AValue.ToString());
  29.     }
  30.  
  31. }

POETiScher Endbericht

February 23rd, 2008 at 10:06 pm by stj

Wie bereits das eine oder andere mal erwähnt, habe ich im Wintersemester 2006/2007 und Sommersemester 2007 im Rahmen meines Informatikstudiums an der Projektgruppe POETS (Process-Oriented Enterprise Transaction Systems) teilgenommen. Diese Projektgruppe fand unter der Leitung von Prof. Rehof am Lehrstuhl 14 des Fachbereichs Informatik an der Universität Dortmund statt. Sie wurde in enger Zusammenarbeit mit dem Fraunhofer-Institut für Software- und Systemtechnik ISST durchgeführt.

Warum ich das hier erzähle?
Weil der Endbericht mittlerweile online zur Verfügung steht.

… während … und danach!

February 17th, 2008 at 6:14 pm by stj

Zum guten Abschluss noch ein paar Fotos von der Sprengung und dem Trümmerfeld danach.

Sprengung Volkswohl Bund Hochhaus 1 Sprengung Volkswohl Bund Hochhaus 2 Sprengung Volkswohl Bund Hochhaus 3
Sprengung Volkswohl Bund Hochhaus 4 Sprengung Volkswohl Bund Hochhaus 5 Sprengung Volkswohl Bund Hochhaus 6 Sprengung Volkswohl Bund Hochhaus 7 Sprengung Volkswohl Bund Hochaus 8 Sprengung Volkswohl Bund Hochaus 9 Sprengung Volkswohl Bund Hochaus 10 Sprengung Volkswohl Bund Hochaus 11

Bewegte Bilder gibt es in der WDR MEDIATHEK regional zu sehen:

Und eine sehr schöne Sammlung mehrerer Quellen mit Fotos und Videos findet sich unter dem Titel Ein Knall, schlotternde Knie und viel Staub bei der Muschelschubserin.

Vor der Sprengung …

February 17th, 2008 at 7:36 am by stj

Nachdem sich bei dem schönen Wetter gestern wohl mehr "Touristen" als sonst in meinen Hinterhof verirrt hatten, um Fotos zu machen, habe ich mir gedacht, ich könnte auch nochmal das eine oder andere Bild nachliefern. Hier daher noch zwei Fotos vom Volkswohl Bund Hochhaus von gestern Nacht. Das Gebäude wurde durch das THW die ganze Nacht hell beleuchtet.

Volkswohl Bund Baustelle bei Nacht (16.02.2008) Volkswohl Bund Hochhaus bei Nacht (16.02.2008)


Der WDR hat auch noch einen Beitrag über die "Letzte Vorbereitung".

Baustellentourismus

January 17th, 2008 at 2:20 pm by stj

In letzter Zeit stelle ich immer wieder verwundert fest, dass mein Hinterhof und auch die Hinterhöfe der umliegenden Häuser mehr und mehr zu einem Aufenthaltsort für alle möglichen Hobbyfotografen (und betagtere Herren(-Grüppchen)), werden. Der Volkswohl Bund will am Standort seiner alten Firmenzentrale nämlich ein neues Hochhaus bauen. Wie das aussehen soll, kann man sich auf der Website von "nps Tchoban Voss" anschauen. Dafür muss das alte Hochhaus aber erstmal verschwinden. Scheinbar scheint die bevorstehende Sprengung und der Abriss des Hochhauses den einen oder anderen Baustellentouristen anzuziehen.
Das Interesse scheint immer größer zu werden. Mittlerweile gibt es sogar im Internet ganze Foren-Threads über das Thema und auch in meiner Nachbarschaft wird bereits darüber gebloggt. Hier daher für alle Interessierten ein paar Fotos der Rückansicht der Baustelle:

Volkswohl Bund Hinterhof (17.01.2008) Volkswohl Bund Hochhaus (17.01.2008) Volkswohl Bund Nebengebäude Grafenhof (17.01.2008) Volkswohl Bund Nebengebäude Südwall (17.01.2008)

Zugegeben, so eine Sprengung direkt im Hinterhof ist schon spannend. Leider darf ich mich während der Sprengung nicht in meiner Wohnung aufhalten um das Schauspiel aus nur ein paar Metern Entfernung zu bestaunen. Ich denke allerdings derzeit über die Installation einer Webcam nach, um das Schauspiel wenigstens online verfolgen zu können. Ggf. wird es dann auch ein Video geben, dass ich dann natürlich ebenfalls hier veröffentlichen werde.