c - 进程的信号量等价物?

标签 c linux process synchronization

我有一个 fork 两个子进程的父进程。我需要强制执行这些子进程运行的特定顺序。

例如,父进程从文件中获取“命令”,根据该命令,父进程将使用未命名管道将该命令传递给子进程 a 或子进程 b。我需要按照 parent 从文件中收到命令的相同顺序在 child 身上发生事情。

我使用信号量的方式在进程之间不起作用。有什么想法吗?

最佳答案

信号量在进程之间工作得很好。例如:

#include <stdio.h>
#include <semaphore.h>
#include <unistd.h>

int main(void)
{
  // Error checking omitted for expository purposes
  sem_t *sem = sem_open("test_semaphore", O_CREAT|O_EXCL, 0, 1);
  sem_unlink("test_semaphore");
  int child = fork();
  printf("pid %d about to wait\n", getpid());
  sem_wait(sem);
  printf("pid %d done waiting\n", getpid());
  sleep(1);
  printf("pid %d done sleeping\n", getpid());
  sem_post(sem);

  if(child > 0)
  {
    int status;
    printf("parent done, waiting for child\n");
    wait(&status);
  }

  printf("pid %d exiting\n", getpid());
  return 0;
}

输出:

$ time ./a.out
pid 61414 about to wait
pid 61414 done waiting
pid 61415 about to wait
pid 61414 done sleeping
parent done, waiting for child
pid 61415 done waiting
pid 61415 done sleeping
pid 61415 exiting
pid 61414 exiting

real    0m2.005s
user    0m0.001s
sys 0m0.003s

关于c - 进程的信号量等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6659780/

相关文章:

C 程序仅由于格式说明符而显示错误

c - 父进程和子进程,如果一个退出,如何通知另一个退出?

c - 如何创建僵尸进程?

c# - 如何在 C# 中执行 cmd,然后在同一窗口中执行另一个命令?

c - parent 不创造 child ?

C内存泄漏与双指针

C 在float数组中找到2个最大的数字和2个最小的数字

c - 调试 postgresql for where 'A' < 'a'

linux - 在尝试使用 ssh 设置时间时寻找匹配的 `"时出现意外的 EOF

python - 重定向到变量值和字符剪切逻辑