Multi Threading [closed]
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this questionI'm learning Multi Threading at the moment, in C#, but as with all learning I like to learn best practices. At the moment the area seems fuzzy. I understand the basics, and I can create threads.
What should I look out for 开发者_Go百科when creating multi threaded applications. Are there any set rules or best practices that I should know about? Or anything to remember in order to avoid slip ups down the line?
Thanks for the responses.
In addition to the MSDN Best Practices, I'll add:
- Don't make your own threads. Prefer to use the ThreadPool (or the new Task Parallel Library Tasks). Managing your own thread is rarely, if ever, the correct design decision.
- Take extra care with UI related issues. Control.Invoke (Windows Forms) and Dispatcher.Invoke (WPF), or use SynchronizationContext.Current with Post/Send
- Favor using the BackgroundWorker class when appropriate.
- Try to keep synchronization via locks to a minimum
- Make sure to synchronize everything that requires synchronization
- Favor the methods in the Interlocked class when possible over locking
Once you get more advanced, and are trying to optimize, other things to look for:
- Watch out for false sharing. This is especially problematic when working with arrays, since every array write to any element in an array includes a bounds check in .NET, which in effect causes an access on the array near element 0 (just prior to element 0 in memory). This can cause perf. to go downhill dramatically.
- Beware of closure issues, especially when working in looping situations. Nasty bugs can occur if you're closing on a variable in the wrong scope when making a delegate.
MSDN - Managed Threading Best Practices
That MSDN Article does a really good job at touching on the danger areas and giving the best practices for managing/working around those areas.
Since I have this open on another tab...
http://www.yoda.arachsys.com/csharp/threads/
I'm only a couple chapters in but it was written by Jon Skeet.
Are there things you should know about ? Certainly.
Dangers:
- Race Conditions
- Deadlocks
A usefull and interesting article can be found here
I highly recommend that you start by digesting this: http://www.albahari.com/threading/.
精彩评论