C++ C++;静态功能复制

C++ C++;静态功能复制,c++,multithreading,static-functions,C++,Multithreading,Static Functions,假设我有一个带有静态函数的类。该类的构造函数使用静态函数作为其入口点来创建pthread_ 我的问题是: 如果我有这个类的多个实例,它们会使用这个函数运行自己的线程吗?这样做有什么问题吗?而且。。。如果函数本身有静态变量,我会因为它不是可重入的而有问题吗?如果构造函数每次都执行pthread\u create(),那么线程的数量将与对象的数量一样多。如果这些线程访问类中的静态变量,则需要确保对这些变量的访问受到互斥锁的保护。(另外,如果这些线程访问非静态变量,那么您也需要保护这些变量,以防对象方

假设我有一个带有静态函数的类。该类的构造函数使用静态函数作为其入口点来创建pthread_

我的问题是:


如果我有这个类的多个实例,它们会使用这个函数运行自己的线程吗?这样做有什么问题吗?而且。。。如果函数本身有静态变量,我会因为它不是可重入的而有问题吗?

如果构造函数每次都执行
pthread\u create()
,那么线程的数量将与对象的数量一样多。如果这些线程访问类中的
静态
变量,则需要确保对这些变量的访问受到互斥锁的保护。(另外,如果这些线程访问非静态变量,那么您也需要保护这些变量,以防对象方法的其他调用方调用它们)


每个对象一个线程可能太多,因此您可能需要重新考虑您的设计。

是的,所有类都将使用相同的函数启动一个新线程。就像使用非成员函数一样


至于函数静态变量,这是一个问题。因为C++实际上没有定义任何并发性,所以你可能会看到一个竞争条件。甚至在构造这些函数静态变量时。在C++0x支持可用之前,您需要为CPU寻找特定于编译器的线程功能,以便告诉它将这些函数静态变量设置为“线程本地”。这样,每个线程都有自己的副本。

不太清楚“运行自己的线程”是什么意思,但最后一个问题的答案是肯定的,您会遇到问题。如果您将每个类的“this”指针传递到静态函数入口点,以便每个线程都可以从自己的类实例访问成员,那你就不会有任何问题了。