我正在开发一个 C++ 多线程应用程序,并面临一些与多线程程序中的成员变量相关的问题。
据我所知,每个线程的堆是通用的,它存在于全局区域中,而每个线程都有自己的堆栈。请建议在以下情况下如何共享成员变量:
- 创建对象的类是单例,内存分配是动态的。对象是成员变量。
代码示例:
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();
}
}
- 创建对象的类是常规类,内存分配是动态的。对象是成员变量。
代码示例:
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();
}
}
创建对象的类是单例,内存分配是静态的。对象是成员变量。
创建对象的类是常规类,内存分配是静态的。对象是成员变量。
请在这里帮助,因为我在网上阅读了各种文章,但我无法理解这个概念。
最佳答案
当多个线程访问一个变量时,它需要某种同步,例如,多个线程不会同时写入变量。
对于单例,在实际构造类时需要同步(这将因实现方式而异)。访问类的成员变量时也会要求同步。
如果此类未在创建它的线程之外使用,则不需要同步。
如前所述,我不清楚内存分配是静态的
是什么意思。
关于C++多线程成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33820185/