我想在Linux下用C++编写一个库,帮助应用程序使用特定的协议(实际上是FastCGI)。库将侦听套接字( TCP或Unix),接收请求,将其转发给用户代码,并发送由所述用户代码生成的响应。
套接字上将有许多连接,每个连接将承载许多请求(可能同时--有一个交错机制)。用户代码(使用库)很可能是多线程的,以便并行处理多个请求。
我希望我的库是健壮的,并且对用户代码提出尽可能少的假设/要求,包括所使用的多线程类型。据我所知,Linux中的clone()函数可以以几十种不同的方式发送进程--有或没有共享内存、共享文件句柄等等。如何实现多线程应该由用户来决定。
这让我感到困惑,因为库代码可能突然发现自己是fork()'ed的,而代码的多个副本可能突然从同一个套接字读取并处理相同的请求。更糟糕的是--父进程可能终止,只留下子进程,从而产生更多子进程,甚至可能在不同的进程名称空间中产生更多子进程--这是一团糟。
哪些Linux工具可以帮助协调需要访问同一个外部资源(套接字)的同一代码的所有副本?实现这种线程安全库的标准方法是什么?我必须自己选择一个线程模型并将其强加给图书馆的消费者吗?
发布于 2012-11-11 15:01:50
https://stackoverflow.com/questions/13331858
复制相似问题