我可以通过这种方式模拟多个客户端吗?

时间:2011-09-28 02:58:35

标签: c multithreading

我写了一个小型服务器程序。我想看看它是如何处理多个请求的。所以我编写了以下程序来模拟多个客户端。

伪代码:

main()
{

    //set up all necessary data structures to connect to the server

    fork();
    fork();
    fork();

    create_socket();
    connect()

    //more code

}

有更好的方法吗?我可以使用哪些工具来测试C中的多线程程序(至少是基本功能)?

1 个答案:

答案 0 :(得分:1)

你基本上用这种方法创建了一个“流程粉丝”,所以是的,这可以工作,虽然它不是线程......你实际上是在创建新的流程。因此,为了防止僵尸子进程,您需要“等待”所有进程在生成新进程的每个进程中完成。对于已调用main()的所有进程,您可以使用fork()末尾或附近的以下行执行此操作(即,包括子进程以及它们正在生成其他进程):< / p>

while(wait(NULL) != -1 || errno == EINTR);

这将等待当前进程产生的所有子进程,同时阻止由于您的进程捕获信号而导致wait()的任何提前返回。如果当前流程没有剩余子流程,则wait()将返回-1并将errno设置为ECHILD,从而退出while循环。