/*
compile:
g++ -D_REENTRANT -lpthread xx.cpp
*/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
sem_t full, empty;
char buf[256];
void* producer(void* p)
{
while (1)
{
sem_wait(&empty);
scanf("%s",buf);
sem_post(&full);
}
}
void* consumer(void* p)
{
while (1)
{
sem_wait(&full);
printf("%s\n",buf);
sem_post(&empty);
}
}
int main()
{
sem_init(&full, 0, 0);
sem_init(&empty, 0, 1);
pthread_t producer_id, consumer_id;
pthread_create(&producer_id, NULL, producer, NULL);
pthread_create(&consumer_id, NULL, consumer, NULL);
pthread_join(producer_id, NULL);
pthread_join(consumer_id, NULL);
sem_destroy(&full);
sem_destroy(&empty);
return 0;
}
Linux使用信号量解决生产者消费者问题
最新推荐文章于 2024-06-24 10:44:21 发布