【发布时间】:2016-12-16 00:17:20
【问题描述】:
我正在编写代码以模拟卖票情况:
两个线程在一张一张卖票,一个线程是在票数为0时显示sold out。
所以我尝试使用条件变量。这是代码:
int a = 10;
pthread_mutex_t mtx;
pthread_cond_t cond;
void * funca(void *p)
{
while(1)
{
pthread_mutex_lock(&mtx);
if (a == 0)
{
break;
}
a--;
pthread_mutex_unlock(&mtx);
sleep(1);
}
pthread_mutex_unlock(&mtx);
pthread_cond_broadcast(&cond);
return NULL;
}
void * funcb(void *p)
{
while(1)
{
pthread_mutex_lock(&mtx);
if (a == 0)
{
break;
}
a--;
pthread_mutex_unlock(&mtx);
sleep(1);
}
pthread_mutex_unlock(&mtx);
pthread_cond_broadcast(&cond);
return NULL;
}
void * funcc(void *p)
{
pthread_mutex_lock(&mtx);
while(a != 0)
{
pthread_cond_wait(&cond, &mtx);
printf("I'm nothing");
}
pthread_mutex_unlock(&mtx);
printf("sold out\n");
return NULL;
}
但是,当我执行上面的代码时,我得到一个无限循环,打印了许多 I'm nothing。
【问题讨论】:
-
你还没有初始化你的互斥量和条件变量。声明变量时使用
pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;和pthread_cond_t cond = PTHREAD_COND_INITIALIZER;。 (funca()和funcb()有两个相同的函数也没有意义,你可以让两个不同的线程执行相同的函数。 -
@caf 你能写一个我能接受的答案吗?
标签: c multithreading pthreads mutex race-condition