Thread, System.Threading.Thread, and !Threads (III)

I got email asking me to explain !Threads output in details. I think this is a good question and a good topic for another installment to the series. Here is an example I’ll use for this post: 0:055> !threadsThreadCount: 202UnstartedThread: 95BackgroundThread: 1PendingThread: 0DeadThread: 47                                  PreEmptive   GC Alloc                     Lock             ID  ThreadOBJ       State     GC       Context           Domain    …


Thread, System.Threading.Thread, and !Threads (II)

With knowledge in my previous blog, we could avoid some mistakes in .NET programming. A C++ Thread is very resource heavy. It is associated with a lot of dynamically allocated memory and some OS handles. So it had better to be cleaned up ASAP after its corresponding OS thread dies. C++ Thread class has a…


Thread, System.Threading.Thread, and !Threads (I)

If you use SOS’s !Threads command during debugging a lot,  you should be familiar with such output: 0:003> !threadsPDB symbol for mscorwks.dll not loadedLoaded Son of Strike data table version 5 from “C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\mscorwks.dll”ThreadCount: 12UnstartedThread: 5BackgroundThread: 1PendingThread: 0DeadThread: 5                                  PreEmptive   GC Alloc                     Lock             ID  ThreadOBJ       State     GC       Context           Domain     Count APT Exception  0  0xb74 0x0014f230       …


Special threads in CLR

Question: How many threads does a typical managed process have when it just starts to run?   Answer: regardless how many threads the user creates, there are at least 3 threads for a common managed process after CLR starts up: a main thread which starts CLR and run user’s Main method, CLR debugger helper thread which…


Thread safety of Timer callbacks

I didn’t realize I’ve stopped blogging for 1 year. What a shame! Fortunately I didn’t waste the time: we ship Whidbey Beta1 and Beta2 in the past year! Now with Beta2 out of door, I have more spare time for blogging. 🙂 Today I want to talk about some interesting facts about Timer in CLR….


FCall and GC hole – first post about Rotor

An exsample of FCall My friend Joel Pobar had a great post to demo how to add new code to Rotor which exposes more EE(Execution Engine) internal information to managed world. This is a very good example covers both BCL and EE, and how the two parts interact with each other. As showed in this example, BCL code…