我正在尝试实现生产者/消费者类型的东西,其中生产者线程从字符串中抓取字符并将它们放入循环链表队列(5个节点大)中,消费者线程读取字符并将它们打印到屏幕上. 两个线程在到达换行符时都会停止。我遇到的问题是,在生产者线程终止之前,消费者线程永远不会启动。
int consumer_thread_alive;
...
void * producer(struct Node * head)
{
while (consumer_thread_alive == 0)
{
printf("Waiting on consumer.");
}
...
}
void * consumer(struct Node * head)
{
consumer_thread_alive = 1;
...
}
...
int main(int argc, char *argv[])
{
...
consumer_thread_alive = 0;
pthread_t produce;
pthread_t consume;
printf("Creating producer thread.\n");
pthread_create(&produce, NULL, (void *) producer(&head), NULL );
printf("Creating consumer thread.\n");
pthread_create(&consume, NULL, (void *) consumer(&head), NULL );
pthread_join(produce,NULL);
pthread_join(consume,NULL);
return 1;
}
我剪掉了其他一些部分,但这就是我遇到麻烦的地方(head 在 main 中早些时候被初始化)。如果我按原样运行代码,它会打印出“创建生产者线程”。然后不断打印出“Waiting on Consumer”。直到我按下Ctrl+C并停止它。此外,如果我删除生产者线程顶部的循环,它会运行所有迭代,然后调用消费者线程。无论出于何种原因,它都以串行方式而不是并行方式运行。