【发布时间】:2016-03-13 01:04:00
【问题描述】:
我有这个代码:
#include<stdio.h>
#include<pthread.h>
int mutex=1,i=0,full=0;
void p(int *s)
{
while(*s<=0)
;
*s--;
}
void v(int *s)
{
*s++;
}
void *producer()
{
p(&mutex);
printf("Producer is producing\n");
v(&mutex);
v(&full);
}
void *consumer()
{
p(&full);
p(&mutex);
printf("Consuming\n");
v(&mutex);
}
int main()
{
pthread_t thread1,thread2;
int k;
for(k=0;k<10;k++)
{
pthread_create(&thread1,NULL,(void *(*)(void *))producer,NULL);
pthread_create(&thread2,NULL,(void *(*)(void *))consumer,NULL);
}
pthread_join(thread1,NULL);
pthread_join(thread2,NULL);
}
在消费者函数中添加p(&full)之前,这段代码运行良好,每次随机选择两个函数中的一个;但是在consumer()函数中添加p(&full)后,每次执行producer()函数。我不明白这是为什么。
有人可以帮助我,并为这个问题提出可能的解决方案吗?我希望第一次执行生产者功能。
【问题讨论】:
-
*s--表示*(s--)不是(*s)--
标签: c pthreads producer-consumer