There are two ways to create threads in .net. Using the .net threadpool, a thread can be created and run. They are efficient than manually creating a thread and running. It is expensive creating and destroying threads manually. The threadpool manages the thread switching efficiently. The WCF, web services, asp.net web request are all multi threaded apps running in a .net thread pool. The BackgroundWorker helps to create worker thread and run. It is efficient as ThreadPool – Threadpool calls BackgroundWorker to run tasks. This uses events mechanism to queue up functions.
The synchronization can be achieved with Mutex.Start() and Mutex.Stop() critical section objects. The lock() can also be used to protect an area of operation. When locking is used, it is important to lock objects only – locking primitive data items and the lock will create boxes to handle it. Each item a thread is created for a request, boxing happens, and there is no synchronization.