多个线程掉用同一个处理函数问题
当多个线程掉用同一个处理函数的时候,他们是分别建立自己的一个内存块呢 还要怎么的:比如代码:T
hread[] threads=new Thread[100];
threads[i] = new Thread(new ThreadStart(ThreadProc));
threads[i].IsBackground=true;
threads[i].Start(); //这里将会有几个线程 都调用了ThreadProc()处理函数;
private void ThreadProc()
{
if(mySocket.Connected)
{
statusBar1.Text= "与客户建立连接. ";
while(true)
{
Byte[] ByteRecv=new Byte[256];
mySocket.Receive(ByteRecv,ByteRecv.Length,0);
string strRecv=Encoding.BigEndianUnicode.GetString(ByteRecv);
rtbReceive.AppendText(strRecv+ "\r\n ");
}
}
}
------解决方案--------------------函数内的变量是独立的 但是 函数之外的是共用的.
由其他线程 创建的对象则需要委托方式访问 详情请查看msdn
------解决方案--------------------啊 原来你的可能不行
mySocket 是外部变量 同一时间会冲突
------解决方案--------------------lock{
}
避免冲突
------解决方案-------------------- statusBar1.Text= "与客户建立连接. ";
执行的时候肯定出错,要用委托方式
mySocket.Receive(ByteRecv,ByteRecv.Length,0);
rtbReceive.AppendText(strRecv+ "\r\n ");
我没试过,但理论上在运行时应该是有问题的
------解决方案--------------------每个线程都有自己的堆栈的,而函数里定义的变量是在堆栈里创建的`