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