头文件:#include <semaphore.h>
sem_init
函数的作用:初始化信号量
原型:int sem_init(sem_t *sem,int pshared,unsigned int value)
参数:sem:信号量指针
pshared:0
value:信号量的初始化
返回值:成功:0,出错-1
信号量的PV操作,销毁
函数原型:
/*P操作*/
int sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);
/*V操作*/
int sem_post(sem_t *sem);
//获取信号量的值
int sem_getvalue(sem_t *sem);
//销毁信号量
int sem_deatroy(sem_t *sem);
参数:sem:信号量指针
返回值:成功为0,出错为-1
使用PV操作,完成生产者和消费者之间
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<sys/ipc.h>
#include<semaphore.h>
#include<fcntl.h>
char buff[100];
sem_t mutex,full;
int fd;
void productor(void *arg)
{
while(1)
{
sem_wait(&mutex);
scanf("%s",buff);
printf("the product is %s\n",buff);
sem_post(&full);
}
}
void customer(void *arg)
{
while(1)
{
sem_wait(&full);
printf("the customer has buy %s\n",buff);
sem_post(&mutex);
}
}
int main()
{
pthread_t id1;
pthread_t id2;
int ret;
ret = sem_init(&mutex,0,1);
ret+= sem_init(&full,0,0);
if(ret != 0)
{
perror("sem_init");
}
pthread_create(&id1,NULL,(void*)productor,NULL);
pthread_create(&id2,NULL,(void*)customer,NULL);
pthread_join(id1,NULL);
pthread_join(id2,NULL);
return 0;
}