如何在线程内管理内存?

时间:2016-09-01 16:06:40

标签: multithreading memory thread-safety

如果有多个线程通过一个函数,其中有一个带有变量赋值的for循环。变量值如何在多个线程中混乱?

1 个答案:

答案 0 :(得分:0)

每个线程都有一个名为“线程堆栈”的内存块,32位大约为1MB,64位大小为4Mb,其中存储了作为参数或中间结果的值类型和引用(指向堆的指针);这个空间不是跨线程共享的。剩下的事情(即:共享值类型和引用以及任何引用可能指向的对象)都存储在堆中,即RAM内存的其余部分,它在所有线程中共享。

值可以跨线程混乱,例如在竞争条件下。如果您尝试使用32位CPU从多个线程更新64位值,则可能会出现不一致,以防止在.NET中有许多同步原语,如InterlockMonitor实用程序例。此外,如果使用多个线程而没有同步,则非List<>等非线程安全对象可能会混乱,如果操作不是原子的,则简单的整数递增可能会丢失值。

你应该做一些阅读。我建议你通过Jeffrey Richter的C#书CLR。每个.NET开发人员都应该真正阅读这本书。