2011-04-25 63 views
0

一旦创建了一个程序的目标文件,如果我在不同的输入数据集上只运行一个或多个实例,那么这很重要吗?与这些运行相对应的输出可能是相互关联的吗?在两个不同的输入数据集上运行两个相同的C/C++程序的实例

至于 新手

+4

你的意思是可执行文件?是的,您可以同时运行多个实例。你需要明确的代码来禁止这种行为。 – SuperSaiyan 2011-04-25 04:42:27

+0

要添加到Thrustmaster的评论,输出不相关。代码执行独立发生。 – 2011-04-25 04:43:43

+0

当然,除非两个实例以某种方式相互作用。 – 2011-04-25 04:46:49

回答

2

对于一个设计合理的方案,有多个并发实例应该罚款。每个进程都与其他所有进程分开,具有自己的地址空间,自己的文件描述符以及所有其他资源的一部分。只要输出文件是分开的,所有的都应该像它们自己一样并行工作 - 唯一的例外可能是执行时间。

也就是说,基于所使用的资源和系统服务存在例外情况。其中一些是相对良性的,因为如果代码在分配资源时执行所需的状态检查,那么程序会错误地显示错误消息。例如:

  • 正在侦听网络端口:多个进程无法侦听同一接口上的相同协议端口。即如果一个实例正在侦听tcp/80,则其他实例不能执行相同的操作。

  • 写入锁定相同的文件。

其他可能导致你的程序巧妙地失败,可能与这两个进程产生不正确的输出或做错事。例如:

  • 访问与每个进程相同的文件,假设它是该文件的唯一编写者。对于使用硬编码临时文件名的程序尤其常见。输出文件也是常见的受害者。

  • 按名称搜索进程表 - 有多个实例可能会导致关于哪个进程是请求进程的混淆。这是一个设计错误的服务控制程序和脚本的常见错误,它们会高兴地杀死错误的服务器实例。

  • UI混淆:如果您有通知托盘小程序,它属于哪个进程?托盘中可能存在两个相同小程序的实例吗?哪一个属于哪个进程?

  • 消息传递:根据操作系统和正在使用的消息传递方法,如果程序使用硬编码ID设置侦听器,则手头可能会混乱。

有大约一百万种不同的方式,两个进程可能导致对方失败。每次您使用外部资源时,您都应该花时间考虑如果第二个程序要求使用相同资源会发生什么情况。如果你幸运的话,你将有一个很好的状态代码来告诉你 - 在其他情况下,你可能不得不明确保护你的程序。

如果一个程序不能处理多个实例,将此限制彻底记录下来然后使用锁定代码来防止多个实例启动。

+0

感谢您的详细回复。你是对的,我们应该在运行多个实例时考虑这些因素。 – Richeek 2011-04-27 04:17:12

相关问题