资源简介

当程序运行时,父进程fork出4个子进程。父进程负责产生消息(每1s产生一个消息),4个子进程负责处理消息。父子进程之间通过消息队列来传递消息。 父进程需要维护一个本地数据库(格式与共享数据库相同),当生成一个消息时,父进程要同步更新本地数据库。子进程在处理消息时,根据消息的内容来对共享数据库进行更新

资源截图

代码片段和文件信息

#include “child.h“

int count=0; /*每个子进程的运算次数*/
int id;

/*终止子进程*/
void killchild(){
    printf(“pid:%dcount:%d\n“getpid()count);
    exit(1);
}

/*删除信号量*/
void delete_sem(){
    if(semctl(id0 IPC_RMID 0)==-1){
    printf(“delete sem error\n“);
    }
    printf(“delete sem scuueed\n“);
}

/*收到消息*/
void recieve_message(mqd_t mqdchar *addrint semid){
    struct mq_attr mqattr;
    mq_getattr(mqd&mqattr);
    int msg[mqattr.mq_msgsize];

    if((mq_receive(mqdmsgmqattr.mq_msgsizeNULL))!=-1){
P(semid); /*上锁*/
if(msg[1]==1){
    addr[msg[0]]--;
}
else{
    addr[msg[0]]++;
}
V(semid); /*释放锁*/
count++;
    }

}

/*上锁*/
void P(int id)
{
    struct sembuf sb[1]= {0-1 0};
    semop(id sb 1);
}

/*释放锁*/
void V(int id)
{
    struct sembuf sb[1] = {0 1 0};
    semop(id sb 1);
}

/*初始化信号量*/
void init_sem(int semid){
    id=semid;
    semun su={1};

    semctl(semid0SETVALsu);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-08-14 09:54  吴月辉_操作系统编码练习一\
     目录           0  2018-08-14 09:53  吴月辉_操作系统编码练习一\test1\
     文件         320  2018-08-10 14:28  吴月辉_操作系统编码练习一\test1\Makefile
     文件         993  2018-08-14 09:55  吴月辉_操作系统编码练习一\test1\child.c
     文件         382  2018-08-14 09:50  吴月辉_操作系统编码练习一\test1\child.h
     文件        2155  2018-08-14 09:56  吴月辉_操作系统编码练习一\test1\father.c
     文件         414  2018-08-14 09:51  吴月辉_操作系统编码练习一\test1\father.h
     文件        1328  2018-08-14 09:57  吴月辉_操作系统编码练习一\test1\main.c
     文件       14680  2018-08-14 09:51  吴月辉_操作系统编码练习一\test1\test1.exe
     文件      150016  2018-08-10 18:01  吴月辉_操作系统编码练习一\运行说明及实验截图.doc

评论

共有 条评论