C#3.0核心技术-第19章线程-全新翻译注释-19.2(3)

来源:互联网 发布:数据库测试用例怎么写 编辑:程序博客网 时间:2024/04/30 09:03

19.2.2 在线程之间共享数据

前面的例子演示了被匿名方法捕获的局部变量在线程间被共享。这,然而,是一个不寻常(一般也是不希望)的场景。让我们检查在一个线程上的变量通常会发生什么。考虑下列程序:

clip_image001

每一个线程当它进入Go方法时得到一个cycles变量的单独的拷贝并且不能够干涉另一个并发线程。CLR和操作系统做到这一点通过为局部变量赋予每一个线程它自己私有的内存栈。

如果线程们希望共享数据,它们通常借助于一个公共的引用做到这一点。这里是例子:

clip_image002

这个系统允许传递数据给一个新线程和之后从该线程接收返回数据。此外,它是线程在运行时可以彼此通信的方式。

原文注:

共享数据是在多线程中复杂性和晦涩错误的首要原因。尽管(译者注:共享数据)经常是必须的,保持它尽可能简单还是值得的。

被定义为static的字段也在线程间共享。静态字段,实际上,提供了最简单的方法共享数据,很适合于应用程序范围内。

原创粉丝点击