#include
#include
#include
#include
#define MAX_SIZE 1024
sem_t mutex;
sem_t full;
char src[MAX_SIZE];
void *consumer()
{
while(1)
{
sem_wait(&mutex);
printf("You wrote is : %s\n",src);
sleep(1);
sem_post(&full);
}
}
void *producer()
{
while(1)
{
sem_wait(&full);
printf("please input something:");
gets(src);
//scanf("%s\n",src);
sleep(1);
sem_post(&mutex);
}
}
int main()
{
pthread_t id1,id2;
int ret;
//创建信号量
ret=sem_init(&mutex,0,0);
ret+=sem_init(&full,0,1);
if(ret != 0)
{
printf("sem_init error!\n");
exit(1);
}
//创建生产者和消费者线程
ret = pthread_create(&id1,NULL,(void *)consumer,NULL);
if(ret != 0)
{
printf("create consumer error!\n");
exit(1);
}
ret = pthread_create(&id2,NULL,(void *)producer,NULL);
if(ret != 0)
{
printf("create producer error!\n");
exit(1);
}
//等待进程的退出
pthread_join(id1,NULL);
pthread_join(id2,NULL);
return 0;
}
目前有一个问题就是在用scanf函数获取字符时遇到的问题,就是输入一个字符后需要再输入一个字符,才会显示前面输入的字符,而get函数则没有这个问题,后续会解决。。。
补:因为scanf有缓冲区。所以用gets更好