gpt4 book ai didi

c++ - 在构造函数中使用 "this"启动线程安全吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:24 24 4
gpt4 key购买 nike

#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;
}

上面的代码是安全的/定义的/良好的实践吗?

是否应该在构造函数返回后启动线程?

最佳答案

您在构造函数中启动线程的具体示例没有任何问题。线程访问的类成员已经初始化。不过,这并不意味着它总是“安全的”。

一个示例是具有线程调用的虚拟方法的类。显然,除非采取适当的步骤来确保在构造覆盖虚拟方法的最派生对象之前线程不会调用虚拟方法,否则它是不“安全的”,并会导致未定义的行为。

即使采取了适当的步骤,它仍然可能安全也可能不安全,这取决于虚拟方法做什么或不做什么。

因此,如您所见,无论是否“安全”,都没有适用于所有情况的通用答案。需要分析从构造函数启动的线程的每个特定用例,以确定这样做是否“安全”。

但这实际上与 C++ 的许多其他方面没有什么不同。

关于c++ - 在构造函数中使用 "this"启动线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37227166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com