调用另一个程序,将任务分配给其中的线程并返回[关闭]

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中不需要单独的线程,每次都先读取所有数据,然后将其写入文件。

【讨论】:

以上是关于调用另一个程序,将任务分配给其中的线程并返回[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为给定线程切换任务

如何在另一个线程/任务中正确调用大逻辑?

linux能干啥

服务如何将结果返回给活动

服务如何将结果返回给活动

JAVA多线程基础