假设我有一个带有静态函数的类。该类的构造函数使用静态函数作为其入口点执行 pthread_create。
我的问题是:
如果我有这个类的多个实例,它们会都使用该函数运行自己的线程吗?这样做有什么问题吗?而且......如果函数本身有静态变量,我会不会因为它不能重入而有问题?
假设我有一个带有静态函数的类。该类的构造函数使用静态函数作为其入口点执行 pthread_create。
我的问题是:
如果我有这个类的多个实例,它们会都使用该函数运行自己的线程吗?这样做有什么问题吗?而且......如果函数本身有静态变量,我会不会因为它不能重入而有问题?
如果您的构造函数pthread_create()
每次都执行一次,那么您将拥有与执行对象一样多的线程。如果这些线程访问static
您的类中的变量,您将需要确保对这些变量的访问受到互斥锁的保护。(此外,如果这些线程访问非static
变量,您也需要保护它们,防止其他调用者访问您的对象的方法)。
每个对象一个线程可能太多了,因此您可能需要重新考虑您的设计。
是的,所有的类都会启动一个具有相同功能的新线程。就像他们使用非成员函数一样。
至于函数静态变量,这是一个问题。因为 C++ 实际上并没有定义任何关于并发的东西,所以您可能正在查看竞争条件。即使在那些函数静态变量的构造中。在 C++0x 支持可用之前,您将需要为您的 CPU 寻找特定于编译器的线程功能,以便您可以告诉它使这些函数静态变量成为“线程本地”。这样,每个线程都有自己的副本。