In multithreaded C#, it can be wasteful to use one single lock for all threads. Some examples: When creating a lot of directories, you can create one lock for threads that create directories, or you ...