26

当大型项目由于共享突变而崩溃时,多任务处理似乎是一场灾难,我想说共享资源是由多个线程访问的。调试和跟踪错误的来源以及导致错误的原因变得非常困难。这让我问,有没有设计模式可以在设计multithreaded程序时使用?

我非常感谢您对此的看法和评论,如果有人可以提出可以遵循的良好设计实践以使我们的程序线程安全,那将是一个很大的帮助。

4

2 回答 2

14

@WYSIWYG 链接似乎有很多有用的模式,但我可以给你一些指导方针。多线程程序问题的主要来源是更新操作或并发修改,一些较少发生的问题是饥饿、死锁等,如果我可以说这些问题更致命,所以为了避免这些情况,你可以:

  • 使用不可变对象模式,如果对象在创建后无法修改,那么您就不能进行不协调的更新,并且我们知道在您的情况下,JVM 保证创建操作本身是原子的。
  • 命令查询隔离原则:即修改对象的代码与读取它们的代码分开的代码,因为读取可以同时发生但修改不能。
  • 充分利用您正在使用的语言和库功能,例如并发列表和线程结构,因为它们设计精良且性能良好。
  • 有一本书(虽然很旧)但对此类系统的设计非常好,它被称为Java 中的并发编程
于 2013-06-23T18:21:21.847 回答
1

设计模式用于解决特定问题。如果你想避免死锁并增加调试,有一些注意事项

  1. 用户线程安全库。.Net java、C++ 有自己的线程安全库。使用它们。不要试图创建自己的数据结构。

  2. 如果您使用的是 .Net,请尝试使用 Task 而不是线程。它们更符合逻辑和安全。

您可能想查看一些与并发相关的模式列表

http://www.cs.wustl.edu/~schmidt/patterns-ace.html

于 2013-06-23T17:38:24.963 回答