c++ - C/C++ 中的跨平台线程/静态变量 fork

标签 c++ multithreading static fork

我正在尝试编写一个服务器程序,它可以跟踪某个对象的实例数。

目前我使用的是在对象的构造函数期间递增的静态 int:

class myObj{
  public:
    static int numOfInstances;
    myObj();
};
int myObj::numOfInstances = 0;

myObj::myObj(){
    this->numOfInstances = ++myObj::numOfInstaces
}

但我也想为每个连接 fork ,一个子进程处理每个连接,父进程不断监听新连接。

如果我使用 fork(),每个子进程都不知道新的连接,以及由于它们而创建的新对象。

我认为线程可能是一种解决方案,但我不确定是否为这种事情切断了线程(大多数程序将在线程中运行)。即使是,它也不在 ANSI 标准中,所以我宁愿找到一个使用 fork 的解决方案。

如果 fork 没有合理的解决方案,人们会推荐哪种线程解决方案?我正在为 Linux 写作,但我更喜欢跨平台解决方案。

最佳答案

多处理不是 C++ 标准的一部分。但是,如果您在 POSIX 系统上(您有 fork()),您可以从操作系统获取共享内存;查看 shmget() 函数系列。您将需要一些同步机制来访问共享内存(如互斥锁或信号量);还提供了这些。

我建议将 man shm_overviewman sem_overview 作为起点。

关于c++ - C/C++ 中的跨平台线程/静态变量 fork ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6638357/

相关文章:

java - 如何知道我的 threadPoolExecutor 中哪个特定的可运行程序已死亡?

java - 枚举静态或非静态方法

c++ - 命令输入文件如何影响 GCC 中的链接和静态初始化?

c++ - 如何在 Netbeans 中为 C++ 制作应用程序图标

java - 如何使用多线程访问结果集值

python - 在 QLabel 中显示相机流

java - 在 Static void main 中调用方法

如果缓冲区被数据流填充,c++ boost 会被缓冲区阻塞吗?

c++ - 如何从内存管理职责中释放标准字符串?

c++ - win32 (windows.h) 中是否有将 lParam 转换为 POINT 的便捷函数?