C#:在2个不同的线程中共享局部变量

时间:2015-05-26 04:09:34

标签: c# multithreading

请看这个示例代码:

private void StartProgram()
{
    for (int i = 0; i < 10; i++)
    {
        if (true) // some conditions
        {
            int Temp = i; // every thread has different memory location for Temp variable.
            Thread ConnectThread = new Thread(ThreadMethod);
            ConnectThread.Start(Temp);
         }
    }
}

private static void ThreadMethod(object Index)
{
    int ID = (int)Index;
    int Result = 0;
    bool IsConnected;


    Result = ClientSMPP[ID].tcpConnect(Host[ID], int.Parse(Port[ID]));

    InsertToDatabaseMethod();
}

据我所知,Temp变量在每个线程的内存中有不同的位置。我的意思是每个线程都有一个单独的字段。但是当我想在ThreadMethod中做一些动作时,ID字段会发生冲突。我的意思是,每次ThreadMethod运行时它都没有唯一的价值(例如ID的值是&#39; 1&#3; 3倍)。我知道ThreadMethod中可能有多个线程,但它们有不同的内存。我不想使用Lock()。

我如何忽略这种冲突?

2 个答案:

答案 0 :(得分:2)

根据您的要求,将此回复移至“回答”。很高兴我能帮助你! :)

您在不传递值的情况下调用InsertToDatabaseMethod()。

如果插入的值来自外部源(例如:属性),那么是的,锁是可行的方法。

如果值是本地的(例如:您在数据库中插入“ID”,那么您可以将值作为参数传递以避免锁定:InsertToDatabaseMethod(ID)

答案 1 :(得分:0)

您可以像这样简化:

  for (int i = 0; i < 10; i++)
    {
        if (true) // some conditions
        {                 
            Thread ConnectThread = new Thread(ThreadMethod);
            ConnectThread.Start(i);
        }
    }

请注意,每个线程都有自己的堆栈。 局部变量存储在堆栈中。

您没有问题,因为整数是值类型。