operating-system - 在C 中,比赛条件

  显示原文与译文双语对照的内容
0 0

我无法在分析出现问题过去OS考试。 它如下所示:

描述以下程序的输出。 是否存在一个竞态条件?

int count=0;
int main(void)
{   
    pid_t pid;      
    if( (pid = fork()) < 0)     
    {       
        perror("Fork error");       
        exit(1);    
    }   
    else if( pid == 0)  
    {       
        charatatime("Output 1n");  
    }       
    else    
    {       
        charatatime("Output 2n");  
    }   
    printf(“Count = %d”,count);
    exit(0); 
}  
static void charatatime(char * str)
{
    char * ptr;     
    int c;  
    for(ptr = str; c = *ptr++; )
    {
        count++;        
        putc(c, stdout); 
    }
}

还得不好用C 和竞争条件,所以我的回答几乎都是猜测。 但是如果我在电视上见过考试,我会说" 程序进程拆分为父进程和子进程,子进程打印'Output1'并且父打印'Output2',一个字符就转换一个。 那么字母总数为结束时输出的程序,但是,此变量'count'可能不准确,作为竞态条件之间存在子和父。 既可以随时访问和更新计数,这样可能会导致不精确。"

据我所知竞争条件出现当两个或多个线程或进程试图访问或设置相同的共享变量中,唯一的事件,我可以看到这个程序很'count'。 我接近正确,如果没有,有什么能够添加到这个项目创建竞态条件( 假设,当然,我知道不是我们甘愿)?

时间:原作者:7个回答

0 0

至于 count来说,没有竞赛: 每两个进程都有各自的 count.

关于字符的顺序, "Output 1""Output 2"出现在 stdout,确实有竞争: 这两个输出都会发生任意交错。

原作者:
0 0

https://github .com/madan ram/race Condition/blob/master/race_condition c 这会帮你。

正如你看到标准输出打印,内容更改的顺序,因为我们dontt道父和子以什么顺序执行printf语句。

原作者:
...