#include <pthread.h>
class C {
private:
int a;
pthread_t id;
int getA() {return a;}
static void* threadFunction(void* arg) {((C*)arg)->getA();return 0;}
public:
C() {
a=2;
pthread_create(&id,NULL,threadFunction,this);
}
~C() {pthread_join(id,NULL);}
};
int main(int argc, char** argv) {
C c;
}
以上代码是安全/定义/良好实践吗?
你应该在构造函数返回后启动线程吗?
答案 0 :(得分:1)
在构造函数中启动线程的具体示例没有错。线程访问的类成员已初始化。但这并不意味着它总是安全的#34;但
一个示例是具有线程调用的虚方法的类。显然,除非采取适当的步骤来确保线程不会调用虚方法,直到覆盖虚方法的最派生对象被构造出来,否则它不会安全&#34;和导致未定义的行为。
即使采取了适当的步骤,它仍然可能安全,也可能不安全,具体取决于虚拟方法的作用或不作用。
所以,正如你所看到的,它是否安全&#34;是否适用于每种情况。需要分析从构造函数开始的线程的每个特定用例,以确定它是否安全&#34;这样做。
但这与C ++的许多其他方面没什么不同。