使用-lpthread在C中进行多线程处理

时间:2017-10-15 12:43:36

标签: c multithreading

所以我设计了一个服务器来实时接受多个客户端,客户端将“发言”,服务器将“重复”它。客户将一直保持活跃,直到我退出。我尝试使用-lpthread实现它,但服务器将接受所有客户端连接,但随后忽略从第一个客户端接收的所有命令。这是我到目前为止所尝试的:

Tensor

目前,我可以选择的唯一选项是多线程或线程池。感谢。

1 个答案:

答案 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();
    }
}