我被告知要编写一个程序来制作两个相互同步的流程来打印' 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()函数调用时,死锁被删除了。
我需要了解我哪里出错了。任何帮助表示赞赏。提前致谢。