受控并行任务执行使用什么
Controlled Parallel task execution what to use
我正在 运行 对某些对象执行并行任务,为了加快速度,它们 运行 4 个并行。
现在有一个新的需求,我需要执行一个任务,要求一次执行一个任务,而其他任务必须等待(其他任务不能在执行另一个任务)。
我无法使测试同步。
请查看下面的图片以获得更好的解释。
一次执行一个就搞定了,但是想到用一个Semaphore来等待开头和结尾的4个对象。
问题是信号量不会等待所有完成以便让另一个信号量进入。
必须只有在所有 4 个都完成后才能开始和离开此执行。
我应该为此使用什么?
为此使用一个 Barrier
对象,参与计数为 4。这是一个示例:
var barrier = new Barrier(4);
然后在你的任务方法中:
//do some work
//now, wait
barrier.SignalAndWait();
所有方法都会等到所有参与者都调用了SignalAndWait()
,然后它们才会继续。
我正在 运行 对某些对象执行并行任务,为了加快速度,它们 运行 4 个并行。 现在有一个新的需求,我需要执行一个任务,要求一次执行一个任务,而其他任务必须等待(其他任务不能在执行另一个任务)。
我无法使测试同步。
请查看下面的图片以获得更好的解释。
一次执行一个就搞定了,但是想到用一个Semaphore来等待开头和结尾的4个对象。 问题是信号量不会等待所有完成以便让另一个信号量进入。
必须只有在所有 4 个都完成后才能开始和离开此执行。 我应该为此使用什么?
为此使用一个 Barrier
对象,参与计数为 4。这是一个示例:
var barrier = new Barrier(4);
然后在你的任务方法中:
//do some work
//now, wait
barrier.SignalAndWait();
所有方法都会等到所有参与者都调用了SignalAndWait()
,然后它们才会继续。