调用另一个程序,将任务分配给其中的线程并返回[关闭]
Posted
技术标签:
【中文标题】调用另一个程序,将任务分配给其中的线程并返回[关闭]【英文标题】:Invoke another program, assign task to a thread in it and return [closed] 【发布时间】:2018-10-02 15:32:39 【问题描述】:我正在编写一个 C++ 程序,它将被另一个程序调用。我的程序流程类似于下图:
程序说明:program-1
将定期调用program-2
(大约每 30 秒一次)。 program-2
的唯一任务是写入数据,但我不想阻止程序 1 在写入数据时等待。所以,我想把写数据的任务分配给另一个线程,马上从Program-2
出来。
问题:我应该如何在Program-2
中实现一个线程,这样它才不会阻塞program-1
?
PS:数据每次都需要写入同一个文件。
【问题讨论】:
第二个程序是一个典型的服务器。它应该有一个作业队列、一个与外界通信的线程以及一个或多个工作线程。通信线程将作业写入队列,工作线程检索作业并执行它们。队列应该是同步的。在您的情况下,最好保留一个工作线程。 "如何控制线程的创建...?"、"如何确保前一个线程仍然没有写入 XML 文件..." - 这就是 进程交互,其中一个进程代表Program-1
,另一个进程代表Program-2
。当前,当Program-1
运行Program-2
(并向其传递参数)时,您只有一个进程交互。因此,您需要详细说明其他交互的方式。作为 n.m.注意,您可以在进程之间设置网络连接。但也可以使用其他变体:POSIX 消息队列、共享内存等。
How do I control the creation of Threads in this situation?
你不控制创建,你同步线程。一种常见的方法是使用多生产者、单消费者队列。所有线程都将消息写入队列,只有一个线程使用它们并按顺序将它们写入文件。另一种(更简单但扩展性较差)的方法是在数据保存期间简单地锁定文件。
我重新提出了我的问题。请重新打开它(或者如果我需要添加更多信息,请告诉我)。
【参考方案1】:
如果保存数据比生成数据需要更多时间,那么您将不得不将其并行写入另一个文件,您别无选择,因为即使缓冲数据也会导致缓冲区无限增长。
如果不是这样,那么程序2中不需要单独的线程,每次都先读取所有数据,然后将其写入文件。
【讨论】:
以上是关于调用另一个程序,将任务分配给其中的线程并返回[关闭]的主要内容,如果未能解决你的问题,请参考以下文章