概述
实现原理是用的信号量操作
semget,semctl,semop
原理参考链接:
https://blog.csdn.net/weixin_44932880/article/details/109827754
设定一百的初值,一个生产者,每次生产3,三个消费者每次消费1.消费的时间大概是生产的两倍。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/sem.h>
#include <sys/types.h>
#define DELAY (rand() % 5 + 1)
//生产时间
#define DELAY2 (rand() % 3 + 1)
//消费时间
void xf(int num,int semid){
//消费者每次消费1
struct sembuf buf={0,-1,0};
while(1){
sleep(DELAY2);
semop(semid,&buf,1);
printf("number%d consume 1 n",num);
}
}
void sc(int semid){
生产者每次生产3
struct sembuf buf={0,3,0};
while(1){
sleep(DELAY);
semop(semid,&buf,1);
printf("product 3 here n");
}
}
int main(int argc,char *argv[]){
int semid = semget(IPC_PRIVATE,1,IPC_CREAT | 0666);
semctl(semid,0,SETVAL,100);
//设置初值产品一百
pid_t pid;
for(int i=0;i<3;i++){
pid=fork();
if (pid<0)
exit(0);
if(pid==0){
//三个子进程消费
xf(i,semid);
break;
}
}
if (pid>0){
//父进程生产
sc(semid);
}
return 0;
}
最后
以上就是顺心绿草为你收集整理的生产者,消费者同步 linux实现的全部内容,希望文章能够帮你解决生产者,消费者同步 linux实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复