gpt4 book ai didi

c# - 同时运行两个函数

转载 作者:太空狗 更新时间:2023-10-29 22:36:02 24 4
gpt4 key购买 nike

我想一个接一个地运行两个访问第三个函数的函数,条件是当第一个函数使用第三个函数时,第二个函数应该等待。应该可以在第一个访问第三个函数的时间段结束后使用第三个函数。

这个概念听起来像是通过上下文切换实现循环调度。我从理论上知道这一点,但我想实际应用它。我怎样才能做到这一点并进行上下文切换?有人可以给我举个例子吗?还有其他方法可以实现这一目标吗?

编辑:实际上我正在使用 gmap.net 在谷歌地图上绘制标记。我为两个标记创建了两个线程函数。它们将从两个单独的文件中获取所需的数据。将其转换为经纬度并绘制map.with this approach I am creating duplicate functions for both having same functionality.but I guess its not a good way of programming so want to use one common function for plotting and fetching data from file to convert.

因此,当一个线程正在访问公共(public)函数时,另一个线程应该等待。一旦第一个线程释放函数或超过其处理该函数的时间段,它应该执行上下文切换,第二个线程应该访问公共(public)函数。这就是我想要实现的目标。如果我应该修改我的方法,请告诉我。 enter image description here

最佳答案

听起来像 2 个带锁的任务应该做你想做的:

class Program
{
static void Main(string[] args)
{
var task1 = Task.Run(() => Func1());
var task2 = Task.Run(() => Func2());

Task.WaitAll(task1, task2);
}

static object lockObj = new object();

static void Func1()
{
for (int i = 0; i < 10; i++)
{
Func3("Func1");
Thread.Sleep(1);
}
}

static void Func2()
{
for (int i = 0; i < 10; i++)
{
Func3("Func2");
Thread.Sleep(1);
}
}

static void Func3(string fromFn)
{
lock(lockObj)
{
Console.WriteLine("Called from " + fromFn);
}
}
}

锁定防止封闭的代码同时在多个线程中运行。 (Sleep 语句纯粹是为了演示目的而减慢函数速度 - 它们在您的最终代码中没有位置)。

输出是:

Called from Func2
Called from Func1
Called from Func2
Called from Func1
Called from Func2
Called from Func1
Called from Func1
Called from Func2
Called from Func1
Called from Func2

关于c# - 同时运行两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42626632/

24 4 0
文章推荐: java - 如何按日期对对象列表进行排序(java 集合,List)