本人初学,这道题Linux的编程题不会,求高手赐教,帮忙编一下,谢谢啦

参照附录
2025-03-03 06:27:46
推荐回答(2个)
回答1:

/***********
编程实现 进程的同步与互斥

题目:有父亲/儿子/女儿三人和一个盘子.
当盘子为空的时候,父亲 随机往盘子里放香蕉或苹果;
儿子和女儿马上取该水果,但儿子只拿苹果,女儿只拿香蕉
父亲共放20次.
编程模拟实现!
*************/
#include
#include 
#include 
#include 
#include 
//#include //for windows

#define OPEN_FLAG O_RDWR|O_CREAT
#define OPEN_MODE 00777
#define INIT_V    0

static sem_t *sem_apple = NULL;
static sem_t *sem_banana = NULL;


int fatherdo(){
    int i=20;
    while(i-->0){
        printf("[%u]father put %s \n",i,i%2==0 ?"Apple":"Banana");
        if(i%2==0){
            sem_post(sem_apple);
        }else{
            sem_post(sem_banana);
        }
        sleep(1);
    }
    //删掉在系统创建的信号量
    sem_unlink("sem_apple");
    sem_unlink("sem_banana");
    //彻底销毁打开的信号量
    sem_close(sem_apple);
    sem_close(sem_banana);
    return 0;
}
int sondo(){
    sleep(2);
    int i=10;
    while(i-->0){
        //P操作
        sem_wait(sem_apple);
        printf("[%u]Son:I get an apple,father!\n\n",i);
    }
    return 0;
}
int daughterdo(){
    sleep(2);
    int i=10;
    while(i-->0){
        //P操作
        sem_wait(sem_banana);
        printf("[%u]Daughter:I get an bnana,father!\n\n",i);
    }
    return 0;
}
int main(){
    printf("Program begin:\n\n");

 //创建2个命名信号量
 sem_apple  = sem_open("sem_apple", OPEN_FLAG, OPEN_MODE, INIT_V); 
 sem_banana = sem_open("sem_banana", OPEN_FLAG, OPEN_MODE, INIT_V); 
    pid_t pid=-1;
    pid=fork();
    if(-1==pid){
        perror("Failed fork()!");return 1;
    }else if(pid==0){
        //子进程 儿子
        sondo();
    }else if(pid>0){
        pid=fork();
        if(-1==pid){
            perror("Failed fork()!");return 1;
        }else if(pid==0){
            //子进程女儿
            daughterdo();
        }else if(pid>0){
            //主进程
            fatherdo();
            printf("Program End...\n\n");
        }
    }
    printf("[%d <= %d]Three Process are end!\n",getpid(),getppid());
    return 0;
}

进程 信号量通信 模式.


参考: http://blog.sina.com.cn/s/blog_510737a301012z7e.html


我一般都是 线程间通信的。进程间通信 不太熟悉,所以这才 试着写了写。

回答2:

写过生产者与消费者吗 ? 和那个差不多