下一个代码通常打印BA,但有时它可以打印BBAA,BAAB,... ...这怎么可能得到两个A或B吧?但是,这段代码从不打印三个A或B.这两个函数(生产和消费)都运行很多线程。提前谢谢了。奇线程行为
int permission;
void set_permission(int v) {
permission = v;
printf("%c", v + 'A');fflush(stdin);
}
void* produce(void*) {
for (;;) {
pthread_mutex_lock(&mr1);
set_permission(1);
while (permission == 1);
pthread_mutex_unlock(&mr1);
}
}
void* consume(void*) {
for (;;) {
pthread_mutex_lock(&mr2);
while (permission == 0);
set_permission(0);
pthread_mutex_unlock(&mr2);
}
}
'fflush(标准输入);'导致udnefined行为;不要做 –
我看到2个不相关的互斥体。看起来您可以删除同步过程并获得相同的结果。 –
关于两个不同的互斥体的引用是什么?如果代码试图保护变量'permission',那么所有的互斥量引用应该是同一个互斥量。建议:for(;;){while(!permission);的pthread_mutex_lock(&mr1); set_permission(1);调用pthread_mutex_unlock(&mr1);}'消费者线程看起来非常相似,并且将使用相同的互斥 – user3629249