信号量程序导致死锁

时间:2018-04-18 16:36:10

标签: deadlock semaphore

我被告知要编写一个程序来制作两个相互同步的流程来打印' 00110011 ......'

我有以下代码:

#include"headers.h"

int main(int argc, char* argv[]){
    sem_t smid;
    if(sem_init(&smid, 1, 1)<0){
        perror("sem_init");
        exit(EXIT_FAILURE);
    }
    int pid = fork();
    if(pid == 0){
        //child process
        while(1){   
            if(sem_wait(&smid)<0){
                perror("sem_wait");
                exit(EXIT_FAILURE);
            }
            printf("00");
            sleep(1);
            if(sem_post(&smid)<0){
                perror("sem post");
                exit(EXIT_FAILURE);
            }

        }
    }else{
        while(1){
            if(sem_wait(&smid)<0){
                perror("sem_wait");
                exit(EXIT_FAILURE);
            }
            printf("11");
            sleep(1);
            if(sem_post(&smid)<0){
                perror("sem post");
                exit(EXIT_FAILURE);
            }
        }
    }
    return 0;
}

header.s:

#include<stdlib.h>
#include<stdio.h>

#include<semaphore.h>
#include<unistd.h>

以上代码导致死锁,我无法理解原因。 附:我注意到当我删除两个sleep()函数调用时,死锁被删除了。

我需要了解我哪里出错了。任何帮助表示赞赏。提前致谢。

0 个答案:

没有答案