Linux进程间的通信,信号量的使用,生产者消费者
2011-05-19 20:29
585 查看
这是简单的生产者消费者问题,只有一个缓冲区
#include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<linux/sem.h> struct sembuf buf; int Psem(int sem_id); int Vsem(int sem_id); int cache; int main() { union semun arg; int mutexid; int full_sem; int empty_sem; mutexid=semget(IPC_PRIVATE,1,0666|IPC_CREAT); full_sem=semget(IPC_PRIVATE,1,0666|IPC_CREAT); empty_sem=semget(IPC_PRIVATE,1,0666|IPC_CREAT); arg.val=1; if(semctl(mutexid,0,SETVAL,arg)==-1) { perror("set the mutex error/n"); return -1; } arg.val=0; if(semctl(full_sem,0,SETVAL,arg)==-1) { perror("set the full_sem error/n"); return -1; } arg.val=1; if(semctl(empty_sem,0,SETVAL,arg)==-1) { perror("set the empty_sem error/n"); } pid_t pid; pid=fork(); //the father process while(1) { if(pid>0)//the producer { Psem(mutexid); Psem(empty_sem); printf("The producer are producing a product......waiting....."); sleep(1); printf("Done!/n"); Vsem(full_sem); Vsem(mutexid); } else//the consumer { Psem(mutexid); Psem(full_sem); printf("The consumer are consuming a product......waiting......"); sleep(1); printf("Done!/n"); Vsem(empty_sem); Vsem(mutexid); } } return 0; } int Psem(int sem_id) { buf.sem_num=0; buf.sem_op=-1; buf.sem_flg=SEM_UNDO; if(semop(sem_id,&buf,1)==-1) { perror("P failed!/n"); return 0; } return 1; } int Vsem(int sem_id) { buf.sem_num=0; buf.sem_op=1; buf.sem_flg=SEM_UNDO; if(semop(sem_id,&buf,1)==-1) { perror("V failed!/n"); return 0; } return 1; }
相关文章推荐
- Linux进程间的通信,信号量的使用,生产者消费者
- Linux进程间的通信,信号量的使用,生产者消费者
- Linux进程通信-使用信号量
- linux进程间的通信(C): 使用信号量进行同步的共享内存机制
- Linux进程通信--使用信号量
- Operating System-进程/线程内部通信-信号量、PV操作的实现和应用(解决哲学家进餐和生产者消费者问题)
- [Linux管道和IPC]使用信号量和共享内存进行父子进程通信
- linux进程通信-信号量使用
- [转]linux进程通信-信号量使用
- linux进程通信-信号量使用
- linux进程间的通信(C): 使用信号量进行同步的共享内存机制
- Linux下信号量实现进程同步、互斥(生产者消费者问题)
- linux进程间的通信(C): 使用信号量进行同步的共享内存机制
- 关于Linux下进程间使用共享内存和信号量通信的时的编译问题
- linux 线程间使用信号量实现消费者生产者
- Operating System-进程/线程内部通信-信号量、PV操作的实现和应用(解决哲学家进餐和生产者消费者问题)
- linux进程通信-信号量使用
- linux进程通信-信号量使用
- Linux进程间的通信方式:信号量的使用
- 生产者-消费者问题实现 (linux下C同步信号量和互斥信号量的应用)