问题描述:
---------------------
线程1,2是路径搜索函数,一个从开始节点向目的地搜索,一个从目的地向开始节点搜索。希望他们在中间某个节点相遇,然后就得到一条路径。控制要求是:从线程1开始,然后当搜索的路径长度达到两点间直线距离的一半的时候,退出,让线程2执行。线程2也在搜索的路径长度达到两点间直线距离的一半的时候退出,让线程1执行。(中间如果找到路径,就记录下来。)然后继续按照1,2,1,2的顺序执行,直到找到要求的K条路径就退出,当然,线程退出的条件是不一样的(路程为1/4或更小……)。
------------------------
应该怎么做呢?
---------------------
线程1,2是路径搜索函数,一个从开始节点向目的地搜索,一个从目的地向开始节点搜索。希望他们在中间某个节点相遇,然后就得到一条路径。控制要求是:从线程1开始,然后当搜索的路径长度达到两点间直线距离的一半的时候,退出,让线程2执行。线程2也在搜索的路径长度达到两点间直线距离的一半的时候退出,让线程1执行。(中间如果找到路径,就记录下来。)然后继续按照1,2,1,2的顺序执行,直到找到要求的K条路径就退出,当然,线程退出的条件是不一样的(路程为1/4或更小……)。
------------------------
应该怎么做呢?
解决方案 »
- 水晶报表 交叉报表 列重复显示
- winform添加和编辑TreeView节点提示重名后让该节点继续处于编辑状态时遇到的两个问题
- windows窗体程序开发,错误提示:必须声明主体,它未标记为 abstract 或 extern
- (讨论)将数据库操作语句放到对象实体中--架构设计方案
- C# windows服务安装包问题
- 类创建子窗体如何在父窗体显示,在线等
- 请大家来帮忙,关于数据读值的问题!!!
- 关于 TRY 的问题
- 请问Winform有没WebForm的GridView一样的模板功能?纠结一天,路过走过的也水下吧
- 求支持firefox的固定datagrid表头的css
- xml与数据库的问题
- 各位帮帮忙,我做毕业设计,DataGrid控件的更新和删除就是没有用,谁有这方面的程序?急用????
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; //用来控制执行顺序的标志。
}
AutoResetEvent firstEvent = new AutoResetEvent(false);
调用firstEvent.WaitOne()可以使当前方法等待 知道某处调用了firstEvent.Set()才继续往下执行
{
flag = !flag; if()
{
func1();
}
else
{
func2();
] }
}