【问题标题】:How can two threads share memory declared as variables in an object?两个线程如何共享一个对象中声明为变量的内存?
【发布时间】:2023-04-01 01:35:01
【问题描述】:

C 程序可以使用全局变量在父线程和子线程中执行的函数之间共享内存,但是具有多个对象类的 Java 程序没有这样的全局变量。两个线程如何共享一个对象中声明为变量的内存?

【问题讨论】:

  • 它们都需要访问同一个对象引用,就像一对方法一样。完成;)
  • 'C 程序可以使用全局变量在父线程和子线程中执行的函数之间共享内存,'是的,它们可以。他们还可以分享更多。多很多。事实上,他们可以共享过程中的所有内容,(好吧,并不总是安全的:)。

标签: operating-system computer-science


【解决方案1】:

对此的实际答案取决于您使用的语言。

理论上,进程是具有一个或多个线程的地址空间。线程是具有进程地址空间的执行流。

因为进程中的所有线程共享相同的地址空间,所以它们可以不受限制地访问彼此的变量(无论好坏)。绝对所有内容都是共享的。

一些编程语言,例如 Ada 对线程(Ada 中的任务)有很好的支持。 Java 对线程的支持最少。经典 C 和 C++ 根本没有语言支持。

在像 Ada 这样具有真正线程支持的语言中,存在用于在任务之间交换数据的受保护机制。 (但您的 Ada 任务可以调用可以绕过所有保护的汇编语言例程。)在 C/C++ 中,除非您明确计划避免发生,否则您会创建任务火车残骸。

在 Java 中,您可以使用静态成员(包括静态成员函数)模拟您可以不安全地访问的全局变量。

【讨论】:

    猜你喜欢
    • 2013-01-30
    • 2016-02-09
    • 2017-07-28
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多