c# execute 2 threads simultaneously

11,275

You could just set a static time to start your work like this.

private static DateTime startTime = DateTime.Now.AddSeconds(5); //arbitrary start time

static void Main(string[] args)
{
    ThreadStart threadStart1 = new ThreadStart(DoSomething);
    ThreadStart threadStart2 = new ThreadStart(DoSomething);
    Thread th1 = new Thread(threadStart1);
    Thread th2 = new Thread(threadStart2);

    th1.Start();             
    th2.Start();

    th1.Join();
    th2.Join();

    Console.ReadLine();
}

private static void DoSomething()
{
    while (DateTime.Now < startTime)
    {
        //do nothing
    }

    //both threads will execute code here concurrently
}
Share:
11,275
Raghu
Author by

Raghu

Currently working with Australian Federal Govt to transform legacy systems.

Updated on June 27, 2022

Comments

  • Raghu
    Raghu almost 2 years

    I am trying to reproduce a threading error condition within an HTTP Handler.

    Basically, the ASP.net worker procecss is creating 2 threads which invoke the HTTP handler in my application simultaneously when a certain page loads.

    Inside the http handler, is a resource which is not thread safe. Hence, when the 2 threads try to access it simultaneously an exception occurs.

    I could potentially, put a lock statement around the resource, however I want to make sure that it is infact the case. So I wanted to create the situation in a console application first.

    But i cant get 2 threads to execute a method at the same time like asp.net wp does. So, my question is how can you can create 2 threads which can execute a method at the same time.

    Edit:

    The underlying resource is a sql database with a user table (has a name column only). Here is a sample code i tried.

    [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void Linq2SqlThreadSafetyTest()
            {
                var threadOne = new Thread(new ParameterizedThreadStart(InsertData));
                var threadTwo = new Thread(new ParameterizedThreadStart(InsertData));
    
                threadOne.Start(1); // Was trying to sync them via this parameter.
                threadTwo.Start(0);
    
                threadOne.Join();
                threadTwo.Join();
            }
    
    
            private static void InsertData( object milliseconds )
            {
                // Linq 2 sql data context
                var database = new DataClassesDataContext();
    
                // Database entity
                var newUser = new User {Name = "Test"};
    
                database.Users.InsertOnSubmit(newUser);
    
                Thread.Sleep( (int) milliseconds);
    
                try
                {
                    database.SubmitChanges(); // This statement throws exception in the HTTP Handler.
                }
    
                catch (Exception exception)
                {
                    Debug.WriteLine(exception.Message);
                }
            }
        }
    
  • Raghu
    Raghu about 13 years
    Thanks Steve, i tried this code but it couldnt reproduce the exception, is there any other way i can debug it ?
  • Steve Danner
    Steve Danner about 13 years
    I would spawn more threads until it happens, if it doesn't happen, then your problem likely lies elsewhere. Also, see my edit, you'll want to not join the spawned threads until you start them all. Sorry.