gpt4 book ai didi

在C中使用fork创建n个后台进程

转载 作者:行者123 更新时间:2023-11-30 15:54:20 25 4
gpt4 key购买 nike

我正在尝试使用信号量和共享内存在 C 中创建生产者-消费者问题。我已经让信号量和共享内存正常工作,但我无法确定如何运行单个消费者和生产者。

这是作业,要求规定生产者和消费者必须是单线程进程。我已经联系了教授,他推荐使用 fork()。我认为这意味着我无法使用 pthread()。

目前,我为生产者和消费者提供了单独的应用程序(即它们每个都有自己的 main())。我需要能够运行用户指定的尽可能多的生产者和消费者组,并在设定的时间后终止应用程序。

最初我尝试过这个

int Ppid = fork();
if(Ppid == 0){
execv("pathtoproducer", NULL);
}
int Cpid = fork();
if(Cpid == 0){
execv("pathtoconsumer", NULL);
}
//close semaphores and detach shared memory

当然,这会导致问题,因为应用程序将在运行 fork 进程之前关闭信号量。

所以我正在考虑做这样的事情:

 int pid = fork();
if(pid == 0){
execv("pathtoproducer", NULL);
execv("pathtoconsumer", NULL);
}
else{
//wait for timer to run out
}
//detach shared memory and close semaphore

但是,当然,由于我使用的是 execv,消费者永远不会运行。有没有什么东西可以让生产者和消费者同时运行(请记住,我需要有 n 个数量,在本例中我只是尝试使用一组)。

谢谢。

最佳答案

嗯,你总是可以做一个嵌套的fork。

 int pid = fork();
if (pid == 0){
int pid2 = fork();
if (pid2 == 0)
execv("pathtoproducer", NULL);
else
execv("pathtoconsumer", NULL);
} else {

顺便说一句。有比计时器更好的方法来等待您的 child 。

关于在C中使用fork创建n个后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13103908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com