线程访问另一个线程的堆栈

2023-12-14

我的想法是否正确,线程可以访问另一个线程堆栈中存在的变量?

这是假设实例化堆栈变量的函数尚未返回。

我想我在某处读到线程应该只共享堆内存,但我现在怀疑这是否正确?

这是在 C 中使用 POSIX pthreads。


严格来说,从提供线程支持(但接口与 POSIX 线程不同)的 C11 角度来看,是否允许访问另一个线程的堆栈变量(具有自动存储持续时间的变量)是实现定义的行为,假设堆栈变量仍然存在(例如,您将局部变量的地址从主函数传递到通过pthread_create并且主要返回通过调用退出pthread_exit因此传递给线程的变量就消失了,它将是未定义的行为。这与在该函数返回后使用指向其他函数的局部变量的指针没有什么不同 - 线程与否)。

但实际上,这可能适用于大多数(所有?)POSIX 线程实现。我不知道有任何 POSIX 实现不支持此功能。


看着POSIX标准,它实际上要求支持对自动变量的访问:

流程内的单一控制流。每个线程都有自己的线程 ID、调度优先级和策略、errno 值、浮点环境、线程特定的键/值绑定以及支持控制流所需的系统资源。其地址可由线程确定的任何内容,包括但不限于静态变量、通过 malloc() 获得的存储、通过实现定义的函数获得的直接可寻址存储,以及自动变量,可供同一进程中的所有线程访问。

(强调我的)。

所以这对于任何 POSIX 实现来说都应该没问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线程访问另一个线程的堆栈 的相关文章

随机推荐

  • 如果落在另一个 df 中的日期范围之间,python 将值分配给 pandas df

    如果日期落在另一个数据框中的两个日期之间 创建新列并分配值的最佳方法是什么 e g dataframe A date values 2017 05 16 x 2017 04 12 Y dataframe B df contains date
  • Micronaut ReadTimeoutException 异常

    我有一个提供 REST API 的 Grails 4 应用程序 端点之一有时会失败 但会出现以下异常 io micronaut http client exceptions ReadTimeoutException Read Timeout
  • tf.keras 和 tf.python.keras 有什么区别?

    我遇到过严重的不兼容问题 因为相同的代码在其中一个与另一个之间运行 例如 获取张量的值 编译模型 节省优化器 展望Github源码 模块及其导入看起来相当相同 并且tf keras甚至进口自tf python keras 在教程中 我经常看
  • Python:使用 imshow 绘制 2D 彩色图

    我试图使用颜色在二维图上表示两个变量的函数 我遇到过这个例子here from numpy import exp arange from pylab import meshgrid cm imshow contour clabel colo
  • Outlook 无法识别 ics 文件

    我有一些问题 我正在尝试发送 ics 文件 以便 Outlook 用户可以在他的日历中添加该事件 在某些版本中 例如 2010 它运行良好 家庭版 但在某些版本 例如商业版 上它不能直接识别它 您必须双击内容才能预览它 在另一个版本中 当我
  • 如何获取像 `source('myfile.r')` 这样的 R Markdown 文件?

    我经常有一个主要的 R Markdown 文件或knitr LaTeX 文件 我在其中source其他一些 R 文件 例如 用于数据处理 然而 我认为在某些情况下 让这些源文件成为它们自己的可重现文档 例如 R Markdown 文件不仅包
  • 要读取Excel,我们可以使用Spring Batch吗?

    我想知道是否可以使用春季批次 以便读取 Excel 文件并将其保存在数据库中 remark Excel 文件的内容每 2 小时更改一次 如果 Spring Batch 无法实现 我还可以使用什么其他解决方案 去看看Excel 的 sprin
  • Xcode 3.2.6 和 4 链接器错误 ld:bad codegen, 指针 diff in ... 到全局弱符号

    我在 Xcode 3 2 6 和 Xcode 4 中遇到非常奇怪的错误 Xcode 3 2 5 在我的项目中没有错误 默认隐藏符号选项设置为 YES 这些链接错误与模板类内的静态成员 指针 有关 有什么想法 要检查的编译器 链接器键吗 这与
  • 为什么使用“is”表达式的测试比使用runtimeType的测试更稳定?

    在 dart 游览页面上 https dart dev guides language language tour getting an objects type 这些有一个声明 用 is 表达式测试变量类型更稳定 为什么会这样呢 An i
  • 不同角色的不同API功能

    我有asp net core 2 1的API 基于声明的身份验证 是否可以将这两个api函数合二为一 Authorize Roles Admin HttpPost delete public IActionResult Delete Fro
  • XmlSerializer ,base64 编码 String 成员

    考虑一个简单的案例 public class Test public String myString 有什么方法可以告诉 XmlSerializer 在序列化时对 myString 进行 base64 编码吗 您可以简单地将其设置为byte
  • 反应 set(a) 和 set(a => a) 的区别

    case1和case2有什么区别 const a setA useState 0 setA a 1 case 1 setA a gt a 1 case 2 setA a 1 将从以下值更新a从当前外壳 setA a gt a 1 将从之前的
  • 如何在 Vim 中用编号标签替换 CSV 列分隔符?

    我想用不同的值替换一系列管道字符 我该如何使用正则表达式来做到这一点 Example This is a sentence And this is the second one 最后结果 This new is new2 a new3 se
  • 循环回到代码中的特定点

    所以我正在编写一个小游戏 我试图做一些我不明白该怎么做的事情 我定义了一个函数 当代码不满足任何条件时 我希望它返回到另一行代码 但我不明白该怎么做 这是我正在处理的代码的一部分 print What s your favourite ty
  • 序列化与内爆

    您认为在 MySQL 数据库的记录中存储一些图像 ID 的更好方法是什么 这只是图像 ID 将用于从不同的库中获取图像 我是否会像 1 4 7 9 10 12 这样破坏记录中的 id 还是只是序列化数组并存储它 使用其中一种而不是另一种是否
  • 直到在 FluentWait 中无法应用 - java

    我之前有一个 Selenium 的辅助类 它的作用就像一个魅力 突然之间 这个问题出现了 我还附上了受影响功能的屏幕截图 直到 java util function Function 在 FluentWait 中无法应用 到 org ope
  • 如何将 QWebEngineProfile 设置为 QWebEngineView

    我想将不同的 QWebEngineProfiles 设置为不同的 QWebEngineViews 这意味着每个视图都有自己的 cookie 存储 我找不到任何有关它的文档 因此我们将不胜感激所有帮助 任何将独立 cookie 存储设置为独立
  • 在 GWT 中使用查询字符串

    我必须创建一个包含用户 ID 和电子邮件参数的动态 URL 它将直接指向我的 GWT 应用程序中的注册表单 我想设置和获取查询字符串中的参数 我已经提到tphttp code google com p gwt examples source
  • 无法使用java命令行打开PDF文件

    我正在尝试使用命令行参数从 java 打开 PDF 文件 String command cmd c start AcroRd32 exe dir 但是当文件自动打开时我收到错误 Windows cannot find acroRd32 ex
  • 线程访问另一个线程的堆栈

    我的想法是否正确 线程可以访问另一个线程堆栈中存在的变量 这是假设实例化堆栈变量的函数尚未返回 我想我在某处读到线程应该只共享堆内存 但我现在怀疑这是否正确 这是在 C 中使用 POSIX pthreads 严格来说 从提供线程支持 但接口