3

假设我有一个带有静态函数的类。该类的构造函数使用静态函数作为其入口点执行 pthread_create。

我的问题是:

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

4

2 回答 2

3

如果您的构造函数pthread_create()每次都执行一次,那么您将拥有与执行对象一样多的线程。如果这些线程访问static您的类中的变量,您将需要确保对这些变量的访问受到互斥锁的保护。(此外,如果这些线程访问非static变量,您也需要保护它们,防止其他调用者访问您的对象的方法)。

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

于 2011-08-25T19:31:31.000 回答
1

是的,所有的类都会启动一个具有相同功能的新线程。就像他们使用非成员函数一样。

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

于 2011-08-25T19:33:42.653 回答