多线程程序中的同步与父进程和子进程之间的同步

时间:2020-08-04 20:31:31

标签: multithreading process synchronization

如标题中所述。它们之间有什么区别?

1 个答案:

答案 0 :(得分:0)

虽然您的问题不是很具体,但这是我认为最好的答案:

在多线程程序中,有一个具有多个线程的进程。所有这些线程都有自己的堆栈,但共享其他所有线程。换句话说,如果您具有(例如)全局变量,则在一个线程中对其进行更改将对所有其他线程进行更改。这是在同一进程的不同线程之间进行通信的一种形式。

当您有一个父进程和一个子进程时,您共有两个不同的进程,它们不共享任何内容(好吧,孩子依赖父进程保持生命,但这是完全不同的对话)。由于您不能直接修改另一个进程的变量(就像您以前对全局变量所做的那样),因此要将数据从一个进程发送到另一个进程,您将需要使用其他技术,其中最常见的是管道。您可以像对待文件一样思考管道:当您想将数据发送到另一个进程时,您将数据写入管道;当您想从另一个进程中获取数据时,可以从管道中读取数据。

以下是有关管道如何工作的示例的链接:https://www.geeksforgeeks.org/c-program-demonstrate-fork-and-pipe/ 以下是示例链接,介绍了如何在不同线程中访问相同的全局变量:https://www.geeksforgeeks.org/multithreading-c-2/

如果您还有其他问题/如果这个问题不能解决您的问题,请尝试澄清一下

编辑:解决“同步”部分:在多线程程序中,您可以使用互斥锁或屏障之类的结构,这些结构作为全局变量共享,并且可以被进程中的所有线程轻松访问。 在多进程程序中,您将需要使用非常相似的技术进行同步,这些技术作为我上面所讨论的进程间通信系统上的抽象层而构建。 这种抽象层的一个示例是MPI如何进行同步:https://mpitutorial.com/tutorials/mpi-broadcast-and-collective-communication/ 当然,您可以在管道上实现自己的功能。

相关问题