如何确保一定数量的其他线程运行结束后恰好运行线程?
|
我在C#中有一个这样的课程:
public MyClass
{
public void Start() { ... }
public void Method_01() { ... }
public void Method_02() { ... }
public void Method_03() { ... }
}
当我调用\“ Start()\”方法时,一个外部类开始工作,并且将创建许多并行线程,这些并行线程将这些并行线程称为类上的\“ Method_01()\”和\“ Method_02()\”形式。外部类的工作结束后,\“ Method_03()\”将在另一个并行线程中运行。
\“ Method_01()\”或\“ Method_02()\”的线程是在创建Method_03()的线程之前创建的,但是没有保证要在\“ Method_03()\”的线程开始之前结束。我的意思是\“ Method_01()\”或\“ Method_02()\”将失去其CPU转动,而\“ Method_03 \”将使CPU转动并完全结束。
在\“ Start()\”方法中,我知道应该创建并运行\“ Method_01 \”和\“ Method_02()\”的线程总数。问题是,我正在寻找一种使用信号量或互斥量的方法,以确保\“ Method_03()\”的第一条语句将在所有正在运行\“ Method_01()\”的线程结束后准确运行,或者\“ Method_02()\”。
没有找到相关结果
已邀请:
5 个回复
屡倒雷图
实例,并从
对其调用
。 使用单个
实例,然后从
调用
。 为每个
或
呼叫分配一个
,然后从
对其全部调用
(这不是很容易扩展)。 我更喜欢使用
,因为它具有更多的通用性并且仍然具有超强的可扩展性。
靛新比比催
和
并发运行,而没有特定的调用或完成顺序(没有保证,只是在没有测试的情况下键入内存即可):
厦惫
联课
,该变量将用数字线程Method_01和Method_02初始化。 然后,您可以修改这两种方法中的每一种,以在退出前将ѭ19减1:
然后在Method_03的开头,您等待直到threadRuns为0,然后继续:
我是否正确理解了这个问题?
长拳
我还想建议您,因为您的问题陈述非常抽象,所以现在通常可以使用新的Parallel或PLINQ功能更好地解决使用countdownevent解决的实际问题。如果您实际上在处理集合或代码中的某些内容,则可能会有类似以下内容的内容。