Chapter 22. Advanced Threading
We started Chapter 14 with the basics
of threading as a precursor to tasks and asynchrony. Specifically, we showed
how to start/configure a thread, and covered essential concepts such as
thread pooling, blocking, spinning, and synchronization contexts. We also
introduced locking and thread safety, and demonstrated the simplest
signaling construct, ManualResetEvent
.
This chapter resumes where we left off on the topic of threading. In the first three sections, we flesh out synchronization, locking, and thread safety in greater detail. We then cover:
Non-exclusive locking (
Semaphore
and reader/writer locks)All of the signaling constructs (
AutoResetEvent
,ManualResetEvent
,Countdown
andEvent
Barrier
)Lazy initialization (
Lazy<T>
andLazyInitializer
)Thread-local storage (
ThreadStaticAttribute
,ThreadLocal<T>
andGetData
/SetData
)Preemptive threading methods (
Interrupt
,Abort
,Suspend
andResume
)Timers
Threading is such a vast topic that we’ve put additional material online to complete the picture. Visit http://albahari.com/threading/ for a discussion on the following, more arcane, topics:
Monitor.Wait
andMonitor.Pulse
for specialized signaling scenariosNon-blocking synchronization techniques for micro-optimization (
Interlocked
, memory barriers,volatile
)SpinLock
andSpinWait
for high-concurrency scenarios
Synchronization Overview
Synchronization is the act of coordinating concurrent actions for a predictable outcome. Synchronization is particularly important when ...
Get C# 5.0 in a Nutshell, 5th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.