I have a class in C# like this:
public MyClass
{
public void Start() { ... }
public void Method_01() { ... }
public void Method_02() { ... }
public void Method_03() { ... }
}
When I call the “Start()” method, an external class start to work and will create many parallel threads that those parallel threads call the “Method_01()” and “Method_02()” form above class. after end of working of the external class, the “Method_03()” will be run in another parallel thread.
Threads of “Method_01()” or “Method_02()” are created before creation of thread of Method_03(), but there is no guaranty to end before start of thread of “Method_03()”. I mean the “Method_01()” or the “Method_02()” will lost their CPU turn and the “Method_03” will get the CPU turn and will end completely.
In the “Start()” method I know the total number of threads that are supposed to create and run “Method_01” and “Method_02()”. The question is that I’m searching for a way using semaphore or mutex to ensure that the first statement of “Method_03()” will be run exactly after end of all threads which are running “Method_01()” or “Method_02()”.
Three options that come to mind are:
Threadinstances and callJoinon all of them fromMethod_03.CountdownEventinstance and callWaitfromMethod_03.ManualResetEventfor eachMethod_01orMethod_02call and callWaitHandle.WaitAllon all of them fromMethod_03(this is not very scalable).I prefer to use a
CountdownEventbecause it is a lot more versatile and is still super scalable.