所以我设计了一个服务器来实时接受多个客户端,客户端将“发言”,服务器将“重复”它。客户将一直保持活跃,直到我退出。我尝试使用-lpthread实现它,但服务器将接受所有客户端连接,但随后忽略从第一个客户端接收的所有命令。这是我到目前为止所尝试的:
Tensor
目前,我可以选择的唯一选项是多线程或线程池。感谢。
答案 0 :(得分:3)
您致电pthread_create
,然后立即致电pthread_join
。
问题在于pthread_join
等待让线程退出,使代码串行而不是并行。
如果要在接收连接时动态创建线程,请创建一个线程。不要在循环中创建MAX_CLIENT
个线程,其中所有线程处理完全相同的连接。
如果你想使用一个线程池,那么在" main accept()循环"之前创建所有线程 ,然后让它们什么都不做(开始时) )。然后使用(受保护的)队列添加新连接,并且线程检查此队列是否有新连接,并且一个尚未处理连接的线程将接收并处理它。
在伪代码中,类似这样:
thread_function()
{
while (true)
{
sleep_while_queue_is_empty();
get_descriptor_from_queue();
handle_connection();
}
}