2011-08-25 106 views
3

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

我的问题是:

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

+0

不太清楚'自己的线程'是什么意思,但最后一个问题的答案是肯定的,你会遇到问题。 – john

+0

如果您将每个类的“this”指针传递到您的静态函数入口点,以便每个线程都可以从其自己的类实例中访问成员,那么您就不会遇到任何问题。 – Erik

回答

3

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

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

1

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

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