#include <semaphore.h>
#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<pthread.h> #include<semaphore.h> #include<sys/shm.h> int main() { int shmid; sem_t *sem_product,*sem_consume;//分别为生产信号量和消费信号量 //在共享存储中创建两sem_t的信号量 if(shmid = shmget(IPC_PRIVATE,sizeof(sem_t)*2,0600)) perror("shmget error:"); if((sem_product = shmat(shmid,0,0600))) perror("shmat error:"); sem_consume = &sem_product[1]; //设置这两个信号量的初始化 if(sem_init(sem_consume,1,0)) perror("sem_init error:"); if(sem_init(sem_product,1,0)) perror("sem_init error:"); pid_t cpid; cpid = fork(); printf("@fter fork\n"); if(cpid == -1){ perror("fork error"); exit(0); } if(cpid == 0) { printf("@child\n"); while(1){ sem_wait(sem_product); sleep(1); printf("pid:%d product...\n",getpid()); sem_post(sem_consume); } } else{ printf("@parent\n"); while(1) { sem_post(sem_product); sem_wait(sem_consume); printf("pid:%d consume...\n",getpid()); } } }:
运行结果:
root@cloud2:~/slp/mylinuxcprogram# ./sem.out
shmget error:: Success
shmat error:: Success
@fter fork
@parent
@fter fork
@child
pid:25957 product...
pid:25956 consume...
pid:25957 product...
pid:25956 consume...
...
Posex信号量 实现进程间的同步(生产者&消费者),布布扣,bubuko.com
原文:http://blog.csdn.net/ordeder/article/details/20957347