Linux信号量PV操作

多进程实现PV操作,子进程为生产者,仓库可以容纳5个物品,每次检查仓库是否满,若不满则执行P操作,生产一个物品放入仓库。父进程检验仓库是否空,若不空则消耗一个物品,执行V操作。sleep函数是随即设置生产或消费所用时间。

程序主要目的是演示信号量的使用,以备以后参考。

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

#include<sys/ipc.h>#include<sys/sem.h>#include<sys/types.h>

int main(){int semID,ret,num;int sleepTime;struct sembuf buf;semID = semget(IPC_PRIVATE,1,0666);if(semID < 0){printf("创建信号量出错/n");exit(1);}if(fork() == 0){while(1){num = semctl(semID,0,GETVAL,NULL);if(num < 5){sleepTime = rand() % 5;sleep(sleepTime);buf.sem_num = 0;buf.sem_op = 1;buf.sem_flg = 0;ret = semop(semID,&buf,1);if(ret < 0){printf("执行P操作失败!/n");exit(1);}num = semctl(semID,0,GETVAL,NULL);printf("生产者生产了一个物品放入了仓库…仓库中现有物品%d个/n",num);}}}else{while(1){num = semctl(semID,0,GETVAL,NULL);if(num > 0){sleepTime = rand() % 5;sleep(sleepTime);buf.sem_num = 0;buf.sem_op = -1;buf.sem_flg = 0;ret = semop(semID,&buf,1);if(ret < 0){printf("执行V操作失败!/n");exit(1);}num = semctl(semID,0,GETVAL,NULL);printf("消费者从仓库中消耗了一个物品…仓库中现有物品%d个/n",num);}}}

return 0;}

当你成功得意的时候,最重要的是瞧得起别人。

Linux信号量PV操作

相关文章:

你感兴趣的文章:

标签云: