看下面的示例代码:
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的值是3的“ 1”)。我知道ThreadMethod中可能有1个以上的线程,但是它们具有不同的内存。我不想使用Lock()。
我该如何忽略这种冲突?
根据您的请求,将此响应移至“答案”。很高兴我能帮上忙!:)
您正在调用InsertToDatabaseMethod()而不传递值。
如果要插入的值来自外部来源(例如:属性),那么可以,要使用锁。
如果值是本地的(例如:您在数据库中插入“ ID”,则可以将值作为参数传递以避免锁定:InsertToDatabaseMethod(ID)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句