我从事的许多项目的线程实现都很差,而我就是必须追踪这些问题的傻瓜。是否有公认的最佳方法来处理线程。我的代码总是等待一个永远不会触发的事件。
我有点像设计模式之类的想法。
(假设 .NET;类似的事情也适用于其他平台。)
嗯,有lots需要考虑的事情。我建议:
- 不变性对于多线程来说非常有用。函数式编程能够很好地并发执行,部分原因在于强调不变性。
- 当您访问可变共享数据(读取和写入)时,请使用锁。
- 除非确实必要,否则不要尝试无锁。锁很昂贵,但很少成为瓶颈。
-
Monitor.Wait
应该差不多always成为条件循环的一部分,等待条件变为真,如果不成立则再次等待。
- 尽量避免持有锁的时间超过您需要的时间。
- 如果您需要一次获取两个锁,请彻底记录顺序并确保始终使用相同的顺序。
- 记录您的类型的线程安全性。大多数类型don't需要是线程安全的,它们只需要不具有线程敌对性(即“您可以从多个线程使用它们,但它是your如果您想共享锁,则有责任取出锁)
- 不要从非 UI 线程访问 UI(除非以已记录的线程安全方式)。在 Windows 窗体中,使用 Control.Invoke/BeginInvoke
这超出了我的想象——如果这对你有用,我可能会想到更多,但如果对你没有用,我就到此为止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)