在 POSIX 中执行线程

Posted

技术标签:

【中文标题】在 POSIX 中执行线程【英文标题】:executing threads in POSIX 【发布时间】:2011-09-16 06:26:16 【问题描述】:

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

无效*发送() ... 无效*接收() ... 主要的() .. inid = pthread_create(&incoming,NULL,receive,"传入线程"); outid= pthread_create(&outgoing,NULL,send,"传出线程"); .. pthread_join(传入,NULL); pthread_join(传出,NULL); ..

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

【问题讨论】:

【参考方案1】:

一种解决方案是在 send 中使用 while(input != exit) 类型的循环。

让你的主线程只等待 outgoing 线程(这意味着 pthread_join 只用于传出线程)。所以,当用户选择退出时,main 会直接退出而不等待传入线程。

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

另一种解决方案是在 main 中使用 while(input != exit) 类型的循环。定义一个消息队列,main 可以将要发送的消息排队,outgoing 线程使用来自该线程的消息来实际发送它们。

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

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

【讨论】:

@CHID:您可以随时投票和接受以表示感谢;) 哦,当然..抱歉耽搁了;)

以上是关于在 POSIX 中执行线程的主要内容,如果未能解决你的问题,请参考以下文章

Linux Posix Thread

在 posix 线程上创建自动释放池

Linux中-POSIX 线程详解

终止具有关键部分代码的POSIX多线程应用程序的最佳方法是什么?

POSIX 消息队列通过内核空间?

Detached vs. Joinable POSIX线程