在POSIX中执行线程

时间:2011-06-16 10:46:47

标签: c multithreading pthreads

我在C中创建了一个异步聊天应用程序。我创建了两个线程,一个用于接收,另一个用于发送,如下所示。

void* send()
{
...
}

void* receive()
{
...
}

main()
{
..
inid = pthread_create(&incoming,NULL,receive,"Incoming thread");
outid= pthread_create(&outgoing,NULL,send,"Outgoing thread");

..

pthread_join(incoming,NULL);
pthread_join(outgoing,NULL);

..

}

问题是,发送和接收函数只被调用一次,程序终止。我希望两个线程一直运行直到用户希望退出(检查退出的条件在send函数中定义)。怎么解决这个问题?

1 个答案:

答案 0 :(得分:3)

一个解决方案是在发送中拥有while(input != exit)类型的循环。

让你的主要只等待传出线程(这意味着仅对传出线程使用pthread_join)。因此,当用户选择退出时,main将退出而不等待传入的线程。

其次,您需要在receive函数中使用阻塞接收函数。因此,它要么处理传入的消息,要么等待一个消息。

另一种解决方案是在 main 中拥有while(input != exit)类型的循环。定义了一个消息队列,其中 main 可以对要发送的消息进行排队,传出线程使用来自该线程的消息来实际发送消息。

传出线程正在发送消息或被阻塞,直到队列中有一条消息要发送。

输入线程的行为方式与上一解决方案中描述的方式相同。