#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