C ++静态函数重复

时间:2011-08-25 19:29:30

标签: c++ multithreading static-functions

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

我的问题是:

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

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