【问题标题】:executing threads in POSIX在 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); .. }

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

【问题讨论】:

    标签: c multithreading pthreads


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • @CHID:您可以随时投票和接受以表示感谢;)
    • 哦,当然..抱歉耽搁了;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2013-10-23
    • 1970-01-01
    • 2020-03-15
    相关资源
    最近更新 更多