信号量操作

1.信号的操作
Int sem_wait(sem_t *sem);    P操作    
Int sem_try_wait(sem_t *sem);
Int sempost(sem_t *sem);    V操作
Int sem_getvalue(sem_t *sem);
Int sem_destroy(sem_t *sem);    销毁信号

2、用信号的PV操作来实现消费者和生产者的机制

#include
#include
#include
#include
#include
#include
#include
#include
 
#define MAX_SIZE 1024
 
sem_t sem1,sem2;
char buff[MAX_SIZE];
 
void producer(void *arg)
{
    do
    {
        sem_wait(&sem1);
        printf("Producer enter some data:");
scanf("%s",buff);
sem_post(&sem2);
        
    }while(strncmp(buff,"quit",4) != 0);
}
 
void customer(void *arg)
{
    do
    {
        sem_wait(&sem2);
        printf("Customer read is:%s\n",buff);
sem_post(&sem1);
        
    }while(strncmp(buff,"quit",4) != 0);
}
 
int main()
{
    pthread_t id1,id2;
 
    sem_init(&sem1,0,1);
    sem_init(&sem2,0,0);
 
    if(pthread_create(&id1,NULL,(void *)producer,NULL) != 0)
    {
        printf("init producer error!\n");
return -1;
    }
    if(pthread_create(&id2,NULL,(void *)customer,NULL) != 0)
    {
        printf("init customer error!\n");
return -1;
    }
 
    pthread_join(id1,NULL);
    pthread_join(id2,NULL);
 
    return 0;
}

你可能感兴趣的:(Linux,C)