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

本文关键字:线程 局部变量 共享 两个 | 更新日期: 2023-09-27 17:50:50

看下面的示例代码:

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的值是'1' 3次)。我知道也许不止一个线程在ThreadMethod中,但它们有不同的内存。我不想使用Lock()

如何忽略此冲突?

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

根据您的请求,将此响应移动到"answerswer"。很高兴我能帮上忙!:)

您正在调用InsertToDatabaseMethod()而没有传递值。

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

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

可以这样简化:

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

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

你没有问题,因为整型是值类型