2010-06-01 49 views
0

我做了一个搜索,但找不到任何东西。我正在阅读一篇论及线程共享堆栈位置的论文......我想知道如何以及为什么需要这样做。任何例子将不胜感激。线程共享堆栈位置?

非常感谢。

+0

你提到的论文是......? – 2010-06-01 13:19:30

+0

如果论文没有回答这个问题,我会说这不是一篇很好的论文。 – danben 2010-06-01 13:21:48

+0

它的内容如下:“我们维护通过堆栈指针之外的寄存器访问堆栈位置的集合,但这是实现的人为因素,而不是故意计划支持在线程之间共享堆栈位置的程序。” 本文标题为:“橡皮擦:多线程程序的动态数据竞赛探测器” 我明白这个语句的内容,但我想知道是否可以共享堆栈位置? – Achilles 2010-06-01 13:30:24

回答

1

如果您在栈上声明一个变量并将其地址传递给另一个线程,那么您基本上共享一个栈位置。这就是论文所描述的吗?

或者是提到操作系统支持的文件,使得使用相同堆栈的线程保持EIP/SP等?看起来像是一个等待我发生的问题。我想你可以这样做,以确保当你知道你的代码的约束时,每个线程都不会浪费堆栈空间,但看起来像是一种矫枉过正。

+0

它没有详细说明任何内容,并且我个人认为堆栈应该是每个线程都是私有的,但是有没有人在实践中做到这一点?我的意思是共享堆栈位置? – Achilles 2010-06-02 16:05:25

+0

进程中的所有线程都可以访问整个进程的虚拟地址空间 - 因此没有位置是真正的“每栈”私有的。 系统通过在不同位置存储每个堆栈帧的EIP/SP和局部变量(堆栈空间在创建线程时初始化)并提供像TLS(线程本地存储)这样的工具来尝试模拟每个线程的私有空间,但无论如何,它最终只是一个幻想。一个巧妙制作的程序当然可以使用相同的堆栈位置来存储共享数据。在Windows中,您可以在线程创建时指定堆栈大小。 – Alienfluid 2010-06-04 00:10:19