c++多进程中的单例模式到底是怎样实现的?

本萌新最近在看多进程编程,其中服务器设计通过进程池,而进程池采用单例模式实现。大致了解了一下单例模式,但其在多进程中的应用还是不理解。望大佬解答。

具体设计是这样的,进程池类构造函数为私有,有一个静态函数和一个静态类实例,在静态函数中调用构造函数new类对象(如果实例存在就直接返回这个实例),而在构造函数中通过循环创建子进程并且赋予标识(一个类成员)。我想不通的是,在多进程的情况下,子进程应该复制了资源,所以应该每个进程都有一个实例啊?这样怎么实现单例呢。

还有,如果只有一个实例,那其成员变量为什么会随着进程的切换而改变呢?

这文章看了有帮助么: https://blog.csdn.net/qq_29542611/article/details/79301595

我大致浏览了一下,但是多线程和多进程本质上还是不一样的呀。多进程会复制资源,进程之间是不共享数据的,那我这个进程的实例对象为什么可以被其他进程所使用呢,或者说父进程创建的实例是怎么被其他进程接收到的呢。

再看: (8条消息) 多线程调用单例模式的类的同一个方法,是不是需要排队调用?_通往架构师之路-CSDN博客_多线程调用同一个方法 

最好有些代码, 这样别人知道你在具体谈论什么。

class test {
private:
    test();
public:
    ~test() {}
    static test* create(){
        if(!m_only){
            m_only = new test();
        }
        return m_only;
    }
public:
    pid_t m_id;
    static test* m_only;
};

test* test::m_only = NULL;

test::test()
{
    m_id = fork();
    assert(m_id >= 0);
    if(m_id > 0)
        m_id += 1;
    else
        m_id += 2;
}

int main()
{
    test* only = test::create();
    printf("%d\n", only->m_id);
    return 0;
}

 

差不多这样,在构造函数中创建进程,父子进程共享一个实例吗?那子进程在new test(),即构造函数完成之后返回了什么呢