C++多线程成员变量

标签 c++ multithreading singleton

我正在开发一个 C++ 多线程应用程序,并面临一些与多线程程序中的成员变量相关的问题。

据我所知,每个线程的堆是通用的,它存在于全局区域中,而每个线程都有自己的堆栈。请建议在以下情况下如何共享成员变量:

  1. 创建对象的类是单例,内存分配是动态的。对象是成员变量。

代码示例:

class A
{
    // SomeRandomClass is Singleton class
    SomeRandomClass* someRandomClass::m_pInstance = NULL; 

    main()
    {

        pthread_t thread1;
        pthread_create(&thread1,NULL,func,NULL)

    }

    func()
    {

        // Dynamic allocation and object is of singleton class
        myObject = SomeRandomClass::instance();
    }

}
  1. 创建对象的类是常规类,内存分配是动态的。对象是成员变量。

代码示例:

class A
{
    // SomeRandom Class is not singleton 
    SomeRandomClass* m_pInstance = NULL; 

    main()
    {

        pthread_t thread1;
        pthread_create(&thread1,NULL,func,NULL)

    }

    func()
    {

        // Dynamic allocation and object is of singleton class
        myObject = new SomeRandomClass();
    }

}
  1. 创建对象的类是单例,内存分配是静态的。对象是成员变量。

  2. 创建对象的类是常规类,内存分配是静态的。对象是成员变量。

请在这里帮助,因为我在网上阅读了各种文章,但我无法理解这个概念。

最佳答案

当多个线程访问一个变量时,它需要某种同步,例如,多个线程不会同时写入变量。

  1. 对于单例,在实际构造类时需要同步(这将因实现方式而异)。访问类的成员变量时也会要求同步。

  2. 如果此类未在创建它的线程之外使用,则不需要同步。

如前所述,我不清楚内存分配是静态的是什么意思。

关于C++多线程成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33820185/

相关文章:

c++ - boost::python 和 weak_ptr:东西消失了

c++ - 通过 SendMessage 进行 IPC 时如何处理 32 位/64 位不匹配?

c++ - 这是reinterpret_cast 的合法使用吗?如果不是,我该怎么做?

c++ - 与模板一起使用的最佳 C++ 代码覆盖率工具是什么?

Java内存泄漏理解

c++ - 数据管理错误 C++

multithreading - 如何在GDB中调试多线程代码?

java - 老C++程序员,Java新手,需要Java多线程和事件方面的帮助

JavaScript 对象方法返回 null 属性

java - 这种单例设计模式正确吗?