只有一个进程必须一次执行代码部分

时间:2011-05-25 04:15:22

标签: c linux multithreading synchronization

对不起,我正在重复一个问题https://stackoverflow.com/questions/5687837/monitor-implementation-in-c但尚未获得解决方案。我可能错误地问了这个问题。

假设我有一个代码部分B.父进程产生了许多子进程来执行代码B,但我希望一次只有一个进程在代码部分B中。如何在Linux平台上的C中完成它?

感谢您的帮助

编辑。不是线程而是处理。

2 个答案:

答案 0 :(得分:4)

你想要一个互斥锁。

pthread_mutex_t mutexsum;
pthread_mutex_init(&mutexsum, NULL);
pthread_mutex_lock (&mutexsum);
// Critical code
pthread_mutex_unlock (&mutexsum);

如果您认真考虑多个进程而不是多个线程,则需要将互斥锁存储在共享内存段中。

答案 1 :(得分:0)

所以你想要的是在任何时间点只运行一个孩子,那么为什么要一次生成所有子进程呢?

当子进程结束时,会发出SIGCHLD,您可以为此信号编写自己的处理程序,并从处理程序调用spawn。然后,当一个过程中创建一个新的子进程时 - 只有一个子进程在运行。以下是实现此目的的hack(无用,仅用于演示):

#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;
}