在 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 中执行线程的主要内容,如果未能解决你的问题,请参考以下文章