我正在尝试使用信号量和共享内存在 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
当然,这会导致问题,因为应用程序将在运行分叉进程之前关闭信号量。
所以我正在考虑做这样的事情:
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 个它们,在这个例子中我只是尝试使用一个集合)。
谢谢。