c – 线程是否有理由不能访问其他线程的堆栈?
发布时间:2020-12-16 04:51:47 所属栏目:百科 来源:网络整理
导读:我刚刚在我的项目中使用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. 我确实有一些在线程之间共享的堆栈上分配的
我刚刚在我的项目中使用Intel Parallel inspector,它会显示一条警告:
我确实有一些在线程之间共享的堆栈上分配的对象.我不明白为什么这是一个问题.任何提示? 解决方法
想象一下 – 一个线程正在执行,并且调用一个具有本地(堆栈)变量(对象)的方法.它将此对象添加到工作队列,该队列由单独的线程处理.
该线程获取第一个线程添加的项,并访问第一个线程的堆栈上的对象. 在此期间第一个线程做了什么?它可能已退出该方法并释放该堆栈空间.释放的空间可能会也可能不会被重复使用.访问第一个线程的堆栈的第二个线程可能会或可能不会正常工作,具体取决于时间和调用图. 如果您知道堆栈变量将存在而第二个线程处理它,那么它可以是安全的;例如,如果线程1对堆栈变量进行排队,然后阻塞,直到线程2通知它已完成处理,这是一个安全的操作. 发出警告而不是错误,因为这可能是也可能不是合法操作,并且分析器无法确定. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |