多线程:值和引用类型

本文关键字:引用类型 多线程 | 更新日期: 2023-09-27 18:02:00

我只是想确认一下我对多线程的理解:

  • 在堆上初始化的引用类型可以在线程之间共享
  • 在栈上初始化的值类型不能在线程之间共享
  • 但是,在堆对象中初始化的值类型可以在线程之间共享。

多线程:值和引用类型

堆上存在引用类型。虽然您可以在物理上在线程之间共享它们,但它们可能被设计为在不同的线程中使用,也可能不是。

值类型可以在堆栈上存在,也可以不存在。物理上,您可以在线程之间共享值类型,但是除了unsafe代码(可以,但几乎可以肯定不应该,在堆栈上创建指向值类型的指针并将其暴露给另一个线程以解引用),您能够这样做的唯一方法是在堆上,而不是在堆栈上。与引用类型一样,它们可能被设计成在从多个线程访问时能够正常工作,也可能不能。

不完全确定,你想达到什么,但是值类型和引用类型根本不与线程连接。

基本上你写的都是真的。

当你在某个方法中创建了一个值类型,而该值类型的生存期只在你声明的那个块中。因此,没有任何其他线程可以访问它(实际上没有办法甚至尝试用c#代码这样做)。

当你使用一个值类型作为引用类型的成员时,你实际上只是使这个引用类型的大小变大,并且这个值类型永远不会在堆栈中结束,它总是在堆中结束,所以你可以在不同的线程中使用它。

你问题的第一点显然是正确的

还有:记住每个线程都有不同的堆栈