多线程:值和引用类型

时间:2014-05-05 15:59:15

标签: c# multithreading

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

不完全确定,您要尝试的是什么,但值类型和引用类型根本没有与线程相关联。

然而,堆栈是。

基本上你所写的是真的。

当你在某种方法中创建一个值类型时,他的生命周期只在你声明的块中。所以没有任何其他线程可以访问它(实际上没有办法尝试这样做C#代码)。

当您使用值类型作为引用类型的成员时,实际只是使此引用类型的大小更大,并且此值类型永远不会在堆栈上结束,它总是在堆中结束,因此您可以使用它来自不同的主题。

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

另外:请记住,每个帖子都有不同的堆栈