【发布时间】:2011-10-02 01:47:09
【问题描述】:
我正在尝试编写一个服务器程序,它可以跟踪某个对象的实例数。
目前我正在使用在对象的构造函数期间递增的静态 int:
class myObj{
public:
static int numOfInstances;
myObj();
};
int myObj::numOfInstances = 0;
myObj::myObj(){
this->numOfInstances = ++myObj::numOfInstaces
}
但我也想为每个连接分叉,一个子进程处理每个连接,而父进程不断监听新连接。
如果我使用 fork(),每个子进程都不会意识到新的连接以及因此而创建的新对象。
我认为线程可能是一种解决方案,但我不确定是否为这种事情剪断了线程(大多数程序将在线程中运行)。即使是这样,它也不在ANSI标准中,所以我宁愿找到一个使用fork的解决方案。
如果 fork 没有合理的解决方案,人们推荐哪种线程解决方案?我正在为 Linux 编写,但我更喜欢跨平台解决方案。
【问题讨论】:
-
如果您只需要进程计数器,您可以分配一些共享内存并继续使用
fork()。顺便说一句,虽然它是 POSIX,但它仍然不是 ANSI C。再说一遍,POSIX 线程也是如此。 -
谢谢,这是一个不错的选择。我可能已经准备在 Winsock 和 sys/socket.h 之间交换套接字,所以我总是可以在 shmget 和其他东西之间交换。有没有一个好的 Windows 替代 shmget?
-
Windows也有内存映射,搜索MSDN即可。当然,这些函数有不同的名称,但这个概念在 Windows 和 POSIX 中一样存在。
-
Kerrek,如果您将此作为答案,我会接受。
标签: c++ multithreading static fork