C - 使用pthread并等待返回值

时间:2017-05-18 08:34:10

标签: c multithreading pthreads

我目前正在使用select()处理多个客户端的多客户端服务器。但是,当客户端发送需要大量计算的消息时,我必须使用pthread_create()创建一个新线程,以便我的服务器可以保持对来自客户端的其他消息的响应。一旦为该客户端完成计算,我就需要能够向客户端返回一条消息。但我不知道如何知道该线程是否完成以及如何获得最终结果。显然,我不能使用pthread_join(),因为它会在运行新线程时阻止我的服务器程序。那么C提供了一个函数,我可以使用它来获得该子线程的最终结果吗?我也想避免使用全局变量。

2 个答案:

答案 0 :(得分:1)

You can just check if the thread has finished before joining it from the main thread (which will be non blocking)

You should get how to do it from here : How do you query a pthread to see if it is still running?

中的python CGI脚本

否则你可能只是从子线程发回回答,你可以传递连接信息作为线程函数的参数。

答案 1 :(得分:1)

如果您希望子线程在完成处理时唤醒在select()中等待的线程,则可以使用pipe()来创建管道。调用select()的线程将管道的读取端添加到其文件描述符集中,子线程在完成其工作后写入管道的写入端。

如果结果不是太大,你甚至可以通过管道发送结果。