Multithreading 多线程程序中的共享变量

Multithreading 多线程程序中的共享变量,multithreading,Multithreading,据我所知,在多线程应用程序中,每个线程都有自己的堆栈,并与其他线程共享该堆栈。所以,我想知道这是语言、编译器还是操作系统相关的特性?所有多线程应用程序都是这样的吗 我的第二个问题是线程之间是否存在共享变量,它是否在堆中创建?除了通过堆,还有其他可能的方法在线程之间共享变量吗?每个线程都将获得自己的堆栈内存,这是操作系统的特性。 所有多线程应用程序都喜欢并遵循相同的功能 我的第二个问题是,线程之间是否存在共享变量 它是否在堆中创建?有没有其他可能的方式来分享一个 线程之间的变量,除了通过堆 根据J

据我所知,在多线程应用程序中,每个线程都有自己的堆栈,并与其他线程共享该堆栈。所以,我想知道这是语言、编译器还是操作系统相关的特性?所有多线程应用程序都是这样的吗


我的第二个问题是线程之间是否存在共享变量,它是否在堆中创建?除了通过堆,还有其他可能的方法在线程之间共享变量吗?

每个线程都将获得自己的堆栈内存,这是操作系统的特性。 所有多线程应用程序都喜欢并遵循相同的功能

我的第二个问题是,线程之间是否存在共享变量 它是否在堆中创建?有没有其他可能的方式来分享一个 线程之间的变量,除了通过堆


根据Java的说法,只有通过堆才能共享变量。

每个线程都将获得自己的堆栈内存,这是操作系统的特点。 所有多线程应用程序都喜欢并遵循相同的功能

我的第二个问题是,线程之间是否存在共享变量 它是否在堆中创建?有没有其他可能的方式来分享一个 线程之间的变量,除了通过堆


根据Java的说法,只有通过堆才能共享变量。

是依赖于操作系统的特性,但所有操作系统都同意相同的基本原则,即拥有一个公共堆空间和单独的堆栈


共享变量存储在堆内存中。线程仅使用堆共享变量。。显然,这不是共享数据的唯一方式,还有信号、回调和许多其他技术…

是一个依赖于操作系统的功能,但所有操作系统都同意相同的基本原则,即拥有一个公共堆空间和单独的堆栈


共享变量存储在堆内存中。线程仅使用堆共享变量。。显然,这不是共享数据的唯一方法,还有信号、回调和许多其他技术…

我还想说堆栈依赖于操作系统

但是,堆而不是统一内存抽象依赖于语言,因为有些语言为每个线程维护一个堆。但这并不意味着其他线程看不到此堆上分配的数据。只是一种语言不必使用共享的并发数据结构进行分配,也不必使用共享的页面池,例如,在计算集群上,这是非常愚蠢的


现在也有一些语言强制隔离一些内存地址,可能还有内存页,虽然这是为了性能而不是一致性,但这是另一个与分配本身无关的问题。

我还要说堆栈依赖于操作系统

但是,堆而不是统一内存抽象依赖于语言,因为有些语言为每个线程维护一个堆。但这并不意味着其他线程看不到此堆上分配的数据。只是一种语言不必使用共享的并发数据结构进行分配,也不必使用共享的页面池,例如,在计算集群上,这是非常愚蠢的


现在也有一些语言强制隔离一些内存地址,可能还有内存页,虽然这是为了性能而不是一致性,但这是另一个与分配本身无关的问题。

因此,这意味着如果我在openmp pragma中定义共享变量,它将被转换为malloc??不,这意味着每个进程只有一个堆,在该进程下运行的每个线程都有自己相对于当前执行路径的堆栈内存。这意味着,如果我在openmp pragma中定义一个共享变量,它将被转换为malloc??否,这意味着每个进程只有一个堆,并且在该进程下运行的每个线程都有自己相对于当前执行路径的堆栈内存。没有更多,也没有更少。我怀疑Java文档会这样说。内存不仅仅在堆栈和堆之间分配。考虑一个静态和共享变量,如果它与运行时的堆不同,您会说它是在JIT堆上分配的吗?你会说一个文件的缓冲区,由内核分配,存在于内核的堆上吗?我怀疑Java文档是这样说的。内存不仅仅在堆栈和堆之间分配。考虑一个静态和共享变量,如果它与运行时的堆不同,您会说它是在JIT堆上分配的吗?您认为由内核分配的文件缓冲区位于内核堆上吗?