如何解决一次只能执行一个代码部分
抱歉,我在重复一个问题https://stackoverflow.com/questions/5687837/monitor-implementation-in-c,但尚未获得解决方案。我可能错误地问了这个问题。 假设我有一个代码部分B。一个父进程产生了多个子进程来执行代码B,但是我希望一次只有一个进程在代码部分B内。如何在Linux平台上的C语言中执行此操作? 谢谢你的帮助 编辑。不是线程而是进程。解决方法
你想要一个互斥体。
pthread_mutex_t mutexsum;
pthread_mutex_init(&mutexsum,NULL);
pthread_mutex_lock (&mutexsum);
// Critical code
pthread_mutex_unlock (&mutexsum);
如果您很认真地认为它是多个进程而不是多个线程,则互斥锁需要存储在共享内存段中。
,因此,您想要的是在任何时间点都恰好有一个孩子在运行,那么为什么要同时生成所有孩子进程呢?
当子进程结束时,将发出一个“ 1”,您可以为此信号编写自己的处理程序,并从该处理程序中调用生成。然后,当一个进程消失时,您将创建一个新的子进程-只有一个子进程正在运行。下面是一个实现此目的的技巧(没有用,仅用于演示):
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>
void spawn(void){
pid_t child_pid=fork();
if(child_pid > 0){
printf(\"new child created by %d !\\n\",getpid());
sleep(1);
}else if(child_pid == 0){
printf(\"child %d created !\\n\",getpid());
}else{
exit(EXIT_FAILURE);
}
}
void handler(int sigval){
spawn();
}
int main(void){
signal(SIGCHLD,handler);
spawn();
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。