当前位置: 首页 > 知识库问答 >
问题:

进程同步

桑鸿志
2023-03-14
write_semaphore -> 1

1-工序A

main(){
    int a[50],i;

    for (i = 0; i < 50; i++)
    {
        //wait(write_semaphore)
        x = a[i];
    }
}

N-过程B

main(){
    int b[50],i;

    for (i = 0; i < 50; i++)
    {
        b[i] = x;
    }
}

我有1个A进程和N个B进程。进程将A数组的元素写入共享变量x。然后所有N个B个进程都必须读取数据并将其存储到本地数组中。当所有的N B进程都存储它时,那么一个进程最终可以将数组的下一个元素分配给变量x。

 // A process
 i = 0
 x = a[0];

 // B processes

 b[0] = x; // To ALL

 // A process (I can continue now)
 i = 1;
 ...

我如何使用信号量来同步它?最后一个读取数据的进程B应该向写信号量发出信号,以便A进程写入下一个元素。我怎样才能知道每个B进程何时读取数据?

共有1个答案

逄皓轩
2023-03-14

使用计数信号量,如下所示:

处理一个循环(1个实例):

  1. 写入数据。
  2. 递减信号量N次。
    null
 类似资料:
  • 如何使同一进程的多个实例在不相互干扰的情况下并排运行? 我有一个业务流程模型,其中一个基本工作流需要决定需要启动哪个其他工作流。这个基流将在被评估时发送一些信号,这些信号将启动其他子进程。在这些子进程的执行过程中,有些子进程需要等待其他子进程完成。因此,我目前使用中间抛出和捕捉信号来实现某种同步机制。问题是,每当某个信号被发送时,侦听该信号的所有进程都将继续独立于它们运行的实例。我希望只有当这些子

  • 1、进程同步的基本概念 多道程序环境下,进程是并发执行的,不同进程间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,达到资源共享和进程协作,避免进程之间的冲突,引入了进程同步的概念。 (1) 临界资源 多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所使用,我们把一次只允许一个进程使用的资源成为临界资源。 对临界资源的访问,必须互斥的进行。每个进程中,访问临界资源的那段

  • 主要内容:竞争条件,临界部分当两个或多个进程相互合作时,必须保留其执行顺序,否则可能会在执行过程中产生冲突,并产生不适当的输出。 协同进程是可以影响其他进程执行的协同进程,也可以受到其他进程执行的影响。 这些进程需要同步,以保证其执行顺序。 保持合作进程的适当执行顺序涉及的过程称为进程同步。 有各种同步机制用于同步进程。 竞争条件 当两个或多个线程尝试读取,写入并可能根据他们正在同时访问的内存做出决定时,通常会发生竞争状况。

  • 本文向大家介绍Solaris中的进程同步,包括了Solaris中的进程同步的使用技巧和注意事项,需要的朋友参考一下 Solaris实现了各种锁来支持多任务,多线程和多处理。它使用自适应互斥锁,条件变量,信号量,读写锁,旋转栅门来控制对关键部分的访问。 一个自适应互斥使用用于保护仅由短代码段访问每一个关键数据项。 在多处理器系统上,它以标准信号量自旋锁开始。如果锁由正在另一个CPU上运行的线程持有,

  • #include <stdio.h> #include <stdlib.h> int main(void) { pid_t pid; pid = fork(); if (pid < 0) { exit(1); } else if (pid > 0) { printf("Parent\n");

  • 问题内容: 如何同步运行Windows上的两个Java进程? 我正在寻找类似Win32 Named Mutex对象的对象,该对象允许两个进程使用相同的锁定对象。 谢谢 问题答案: 在Java中无法完成所需的操作。不同的Java应用程序将使用不同的JVM,将它们完全分隔成不同的“黑匣子”。但是,您有2个选择: 使用插座(或通道)。基本上,一个应用程序将打开侦听套接字并开始等待,直到它接收到一些信号为