我们正在尝试为 Windows 编写一个服务,并且需要提出一个冗余计划,以便在应用程序中的某个部分出现故障时,它可以重新启动。我想知道我是否可以使用多线程来完成此任务。
我的想法是创建两个线程,每个线程处理不同的任务。我还想让每个线程监视另一个线程以确保它仍在运行,如果不是,那么它应该启动该线程的一个新实例。 这听起来可行吗?我会使用什么线程技术:互斥体、共享内存、信号量等...? 如果这不是正确的方法,那么可能是什么,只需编写两个单独的服务并使用 IPC?
最佳答案
让您的服务在失败时重新启动的最简单方法是让 Windows 执行此操作。您只需将服务配置为自动重启,这非常简单。您也可以在服务安装程序期间以编程方式执行此操作。有关如何执行此操作的指南,请参阅此帖子:Building a Windows Service – Part 4: Extending the Service Installer .
至于提供“冗余”,则没有。冗余的正确定义意味着您拥有不止一个。这可能是使用多个服务,或者更可能是在多个主机上使用多个服务。在单个主机上拥有多个服务更容易,因为如果需要,您可以使用互斥体进行同步。
The real question is what is this service doing?
如果您的服务正在轮询任务,比如来自数据库或消息队列,那么同步会为您处理。只需为您的数据库建模,以便多个服务都可以独立运行和处理工作,而无需重复工作。现在你有了冗余。
关于c# - 多线程应用程序冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10624024/