none
主线程和子线程如何共享同一个变量 RRS feed

  • 问题

  • c# 如何实现主线程和子线程共享同一个变量,就是子线程中能改变共享变量,主线程能收到改变后的变量,

    现在子线程改变共享变量,主线程中的变量没改变。谢谢

     

    2010年7月26日 7:57

答案

全部回复

  • c# 如何实现主线程和子线程共享同一个变量,就是子线程中能改变共享变量,主线程能收到改变后的变量,

    现在子线程改变共享变量,主线程中的变量没改变。谢谢

     


    证明了不是同一个变量。

    变量跟线程是毫无关系的

    2010年7月26日 8:28
  • 我现在就要实现子线程改变变量的值,主线程能收到改变后的变量值,如何实现
    • 已标记为答案 wsk yunfei 2010年7月26日 13:06
    2010年7月26日 8:32
  • 声明一个 Static 的 Object,以及一个强类型的 Static 变量,前面的 Object 用来加锁,后面的用来作为共享变量。

    简单的例子:

    class Foo {
        private static object syncObject = new object();
        private static int sharedValue = 0;

        public static void Main() {
            Thread t1 = new Thread(() => {
                // Do something.
                lock (syncObject) { sharedValue += 3; }
            });

            Thread t2 = new Thread(() => {
                while (true) { if (sharedValue >= 0) { break; } }
            )

            t1.Start();
            t2.Start();
        }
    }

    上面的例子很简单,只是用来说明思路,很多问题没有深入解决,比如死锁问题,以及原子性等。
       


    Mark Zhou
    2010年7月26日 9:05
  • 全局static静态变量。或用代理委托访问试试。
    2010年7月26日 9:08