c – 线程是否有理由不能访问其他线程的堆栈?

前端之家收集整理的这篇文章主要介绍了c – 线程是否有理由不能访问其他线程的堆栈?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚在我的项目中使用Intel Parallel inspector,它会显示一条警告:

One or more threads in the application accessed the stack of another
thread. This may indicate one or more bugs in your application.

我确实有一些在线程之间共享的堆栈上分配的对象.我不明白为什么这是一个问题.任何提示

解决方法

想象一下 – 一个线程正在执行,并且调用一个具有本地(堆栈)变量(对象)的方法.它将此对象添加到工作队列,该队列由单独的线程处理.

该线程获取第一个线程添加的项,并访问第一个线程的堆栈上的对象.

在此期间第一个线程做了什么?它可能已退出方法并释放该堆栈空间.释放的空间可能会也可能不会被重复使用.访问第一个线程的堆栈的第二个线程可能会或可能不会正常工作,具体取决于时间和调用图.

如果您知道堆栈变量将存在而第二个线程处理它,那么它可以是安全的;例如,如果线程1对堆栈变量进行排队,然后阻塞,直到线程2通知它已完成处理,这是一个安全的操作.

发出警告而不是错误,因为这可能是也可能不是合法操作,并且分析器无法确定.

原文链接:https://www.f2er.com/c/119880.html

猜你在找的C&C++相关文章