gpt4 book ai didi

c++ - 线程调用的函数是否对对象删除安全?

转载 作者:行者123 更新时间:2023-11-28 01:28:44 25 4
gpt4 key购买 nike

我想知道线程 1 是否通过传递的对象“obj->fun()”调用类函数,并且该对象在后台被其他线程删除,比如线程 2 线程 1 执行的函数会发生什么情况。

例子:

ClassA {
int functionA() {
...condition(started_execution);
int a=0;
a++;
printf(....a);
return a;
}
};
void startExecution(void *arg) {
/*casting code object A*/
A->functionA();
}

int main() {
ClassA *A = new ClassA();
pthread_create(....,startExecution,(void *)A);
....wait_for(started_execution);
delete A;//just want to know the behaviour and not join method.
}

问题:在上面的场景中,A->functionA调用了函数functionA。如果函数正在执行,删除 A 对函数执行有什么影响,因为对象 A 调用了它? functionA 不处理共享数据?

最佳答案

If the function is executing, what will the impact of delete A on function execution since object A invoked it?

如果执行函数以任何方式使用 this,其影响将是未定义的行为。通过使用 this 我的意思是访问任何数据成员或基础子对象,调用任何成员函数,间接 this 或将 this 传递给某个函数做任何这些事情。

你的 functionA 在设置条件变量后似乎没有以任何方式使用 this,所以不会有任何影响 - 假设条件变量访问本身是正确同步。

但是,这样做并不是一个好主意,因为在 functionA 的定义中看不到必须访问任何成员。以后更改功能时,程序员很容易不遵循该要求。

据我所知,这种情况类似于 delete this; 被认为符合标准,但有潜在危险的情况:Is delete this allowed?

关于c++ - 线程调用的函数是否对对象删除安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52624280/

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