I have this following code with me:
Expand|Select|Wrap|Line Numbers
- public class Program
- {
- static int numThreads = 10;
- static ManualResetEvent resetEvent = new ManualResetEvent(false);
- static int toProcess = numThreads;
- static void Main(string[] args)
- {
- // Start workers.
- for (int i = 0; i < numThreads; i++)
- {
- new Thread(() => MyFunction(i)).Start();
- }
- // Wait for workers.
- resetEvent.WaitOne();
- Console.WriteLine("All threads finished.");
- Console.ReadLine();
- }
- public static void MyFunction(int i)
- {
- Console.WriteLine("Thread " + (i) + " started......., sleeping for " + (i * 1000) + " seconds");
- Thread.Sleep(i * 1000);
- Console.WriteLine("Thread " + (i ) + " ended.......");
- // If we're the last thread, signal
- if (Interlocked.Decrement(ref toProcess) == 0)
- resetEvent.Set();
- }
- }
When I execute this code, instead of getting messages like this:
Thread 1 started......., sleeping for 1000 seconds
Thread 2 started......., sleeping for 2000 seconds
Thread 3 started......., sleeping for 3000 seconds
Thread 4 started......., sleeping for 4000 seconds
.
.
.
Thread 10 started......., sleeping for 10000 seconds
Thread 1 ended.......
Thread 2 ended.......
Thread 3 ended.......
Thread 4 ended.......
.
.
.
Thread 10 ended.......
All threads finished.
I get messages like:
Thread 2 started......., sleeping for 2000 seconds
Thread 3 started......., sleeping for 3000 seconds
Thread 3 started......., sleeping for 3000 seconds
Thread 4 started......., sleeping for 4000 seconds
Thread 9 started......., sleeping for 9000 seconds
Thread 9 started......., sleeping for 9000 seconds
Thread 9 started......., sleeping for 9000 seconds
Thread 9 started......., sleeping for 9000 seconds
Thread 10 started......., sleeping for 10000 seconds
Thread 10 started......., sleeping for 10000 seconds
Thread 2 ended.......
Thread 3 ended.......
Thread 3 ended.......
Thread 4 ended.......
Thread 9 ended.......
Thread 9 ended.......
Thread 9 ended.......
Thread 9 ended.......
Thread 10 ended.......
Thread 10 ended.......
All threads finished.
Could you please tell me where I am making mistake...
If the code is write, does this mean that when we create thread, data doesn't get passed correctly & it should be sent by some other mechanism....
your help is really appreciated........
Thanks in advance......
Zack