据我所知,在多线程应用程序中,每个线程都有自己独立的堆栈,并与其他人共享堆。所以,我想知道这是一个语言,编译器或操作系统相关的功能?所有多线程应用程序都是这样的吗?
我的第二个问题是如果线程中有共享变量,是否在堆中创建?有没有其他可能的方法在线程之间共享变量,除了通过堆?
答案 0 :(得分:2)
每个线程都将获得自己的堆栈内存,这是OS的功能。 所有多线程应用程序都喜欢并遵循相同的功能。
我的第二个问题是如果在线程之间存在共享变量,那么 它是否在堆中创建?有没有其他可能的方式来分享 除了通过堆之外的线程中的变量?
根据Java,没有其他方法可以通过堆共享变量。
答案 1 :(得分:2)
是一个依赖于操作系统的功能,但所有操作系统都同意具有公共堆空间和单独堆栈的相同基本原则
共享变量存储在堆内存中。线程只使用堆共享变量..显然,这不是共享数据的唯一方法,有信号,回调和许多其他技术......
答案 2 :(得分:2)
我还说堆栈是依赖于操作系统的
然而,堆(不是统一内存抽象)依赖于语言,因为某些语言为每个线程维护一个堆。但这并不意味着其他线程无法看到此堆上分配的数据。只是语言不必使用共享的并发数据结构进行分配或共享页面池,例如,在计算集群上这非常愚蠢。
现在也有一些语言可以强制隔离一些内存地址(也许是内存页面,虽然它可以用于性能而不是一致性),但这是另一个与分配本身无关的问题。