C-使用pthread并等待返回值

C-使用pthread并等待返回值,c,multithreading,pthreads,C,Multithreading,Pthreads,我目前正在一个多客户端服务器上工作,该服务器使用select()来处理多个客户端。但是,当客户端发送需要大量计算的消息时,我必须使用pthread_create()创建一个新线程,以便我的服务器能够对来自客户端的其他消息保持响应。为该客户机完成计算后,我需要能够向该客户机返回消息。但我不确定如何知道线程是否完成以及如何获得最终结果。显然,我不能使用pthread\u join(),因为这会在运行新线程时阻塞我的服务器程序。那么C是否提供了一个函数,我可以用它来获得子线程的最终结果呢?我也希望避免

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

您可以在从主线程连接线程之前检查线程是否已完成(这将是非阻塞的)

您应该从这里了解如何操作:


否则,您可能只需从子线程返回答案,您可以将连接信息作为线程函数的参数传递。

您只需在从主线程连接线程之前检查线程是否已完成(这将是非阻塞的)

您应该从这里了解如何操作:


否则,您可能只需要从子线程返回答案,您可以将连接信息作为线程函数的参数传递。

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


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

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


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

“那么C是否提供了一个我可以用来获取子线程最终结果的函数?”是的,选择()。或者,将线程传递给相关的fd,让它直接回复。@thingywott我认为是select()仅适用于文件描述符:|“那么C是否提供了一个我可以用来获取该子线程最终结果的函数?”是的,选择()。或者,将相关的fd传递给该线程,让它直接回复。@Thingywot我认为选择()只适用于文件描述符:|