当前位置: 首页 > 面试题库 >

分叉的子进程是否使用相同的信号量?

沈华晖
2023-03-14
问题内容

假设我创建了一个信号量。如果我派生了一堆子进程,它们还会使用相同的信号量吗?

另外,假设我创建了一个内部带有信号灯并分叉的结构。所有子进程仍然使用相同的信号量吗?如果不是,将struct +
semaphores存储在共享内存中是否允许子进程使用相同的信号量?

我对派生的子进程如何使用相同的信号量感到非常困惑。


问题答案:

假设我创建了一个信号量。如果我派生了一堆子进程,它们还会使用相同的信号量吗?

如果使用的是SysVIPC信号灯(semctl),则为是。如果使用的是POSIX信号量(sem_init),则为是,但前提是您在创建时为pshared参数传递了一个真值并将其放置在共享内存中。

另外,假设我创建了一个内部带有信号灯并分叉的结构。所有子进程仍然使用相同的信号量吗?如果不是,将struct +
semaphores存储在共享内存中是否允许子进程使用相同的信号量?

您的意思是“内部信号量”?将共享对SysV
IPC信号的引用,因为这些信号不属于任何进程。如果您使用的是POSIX信号量,或使用pthreads互斥锁和condvars构造某些东西,则需要使用共享内存和pshared属性(pthreads也具有condvars和互斥锁的pshared属性)。

请注意,MAP_SHARED出于这些目的,使用标志创建的匿名mmap计为(匿名)共享内存,因此实​​际上不必创建命名的共享内存段。普通的堆内存在fork之后将不会被共享



 类似资料:
  • 问题内容: 我想派生多个进程,然后在它们上使用一个信号灯。这是我尝试过的: 输出为: 显然,这意味着信号灯没有按预期的方式工作。您能解释一下我应该如何在分支进程中使用信号量? 问题答案: 您面临的问题是对功能的误解。阅读手册页时, 您将看到以下内容: pshared参数指示此信号量是在进程的线程之间还是在进程之间共享。 如果您到此为止都读完了,您将认为pshared的非零值将使信号量成为进程间信号

  • 这显然意味着信号量没有正常工作。你能解释一下我应该如何在分叉进程上使用信号量吗?

  • 我想写一个方法来确定一棵树是否至少有一对相同的子树,这些子树的值和结构都必须相同。 假设给你一棵树,如下所示: 这将返回,因为我们有一对根为的相同树。 我的想法是遍历每个节点,构建一个映射到

  • 在中,我试图将数据写入共享内存。同时,在中,我正在从相同的共享内存中读取数据。在本例中,我需要在这两个进程之间提供同步。如果我将使用未命名的信号量(使用),它是否有效? 我已经写了这样的代码,它会工作还是不工作?

  • 我必须分叉两个子进程,其中SIGINT命令被阻塞,但其中一个在接收到SIGTERM信号时应该解除阻塞,而另一个子进程和父进程都会打印它们的PID,作为相同SIGTERM信号的结果。第二个子进程应立即终止,但父进程应等待其子进程结束,然后停止。 我刚开始在Linux中学习C编程,但我并不真正理解分叉和信号是如何工作的。据我所知,我编写的这段代码将派生一个进程,子进程将阻止Ctrl-C命令,整个过程将

  • 问题内容: 这是关于Linux中的C语言。 我在其中创建2个子进程。然后,在两个子进程中都运行一个函数,其中有一个局部变量。我在其中写一些价值。然后,我用打印此变量的地址。 这两个过程都打印相同的地址。我以为每个孩子都会得到父母记忆的(独立)副本。我需要每个进程都有自己的变量。我该怎么办或我做错了什么? 问题答案: 您需要了解,物理内存与进程的虚拟地址空间之间存在脱节。 每个进程都有 自己的 4G