问题描述:
---------------------
线程1,2是路径搜索函数,一个从开始节点向目的地搜索,一个从目的地向开始节点搜索。希望他们在中间某个节点相遇,然后就得到一条路径。控制要求是:从线程1开始,然后当搜索的路径长度达到两点间直线距离的一半的时候,退出,让线程2执行。线程2也在搜索的路径长度达到两点间直线距离的一半的时候退出,让线程1执行。(中间如果找到路径,就记录下来。)然后继续按照1,2,1,2的顺序执行,直到找到要求的K条路径就退出,当然,线程退出的条件是不一样的(路程为1/4或更小……)。
------------------------
应该怎么做呢?

解决方案 »

  1.   

    这是我以前帖子中的一段代码, 它没有用事件(Event),而是简单地用变量和同步机制来控制线程的执行:
    using System;
    using System.Threading;
    class Program
    {
        static void Main()
        {
            new Program().test();
            Console.ReadLine();
        }
        public void test()
        {
            ThreadPool.QueueUserWorkItem(Consume);
            ThreadPool.QueueUserWorkItem(Produce);
        }
        void Produce(object dummy)
        {
            while(true)
            {
                lock (this)
                {
                    if (i == 0) return;
                    if (produced) continue;                Console.WriteLine("making {0}...", --i);
                    produced = true;
                }
            }
        }
        void Consume(object dummy)
        {
            while (true)
            {
                lock (this)
                {
                    if (!produced) continue;                Console.WriteLine("eating {0}...", i);
                    produced = false;                if (i == 0) return;
                }
            }
        }
        int i = 100;
        bool produced = false;             //用来控制执行顺序的标志。
    }
      

  2.   

    可以用AutoResetEvent
    AutoResetEvent firstEvent = new AutoResetEvent(false);
    调用firstEvent.WaitOne()可以使当前方法等待 知道某处调用了firstEvent.Set()才继续往下执行 
      

  3.   

    bool flag = true;while()
    {
        flag = !flag;    if()
        {
            func1();
        }
        else
        {
            func2();
    ]   }
    }