线程lock(急急急)

sunrain_leo 2004-10-31 03:12:01
public static void ReadCallback(IAsyncResult objIAsyncResult)
{
StateObject objStateObject = (StateObject)objIAsyncResult.AsyncState;
Socket objSocketHandler = objStateObject.objSocketWork;
int intBytesRead = objSocketHandler.EndReceive(objIAsyncResult);
if(intBytesRead > 0)
{
byte[] btReceive = new byte[intBytesRead];
for(int i=0;i<intBytesRead;i++)
{
btReceive[i] = objStateObject.btBuffer[i];
}
System.Text.Encoding objEncoding = System.Text.Encoding.GetEncoding("GB2312");
string strTemp = objEncoding.GetString(btReceive);
/// 这里需要将收到的strTemp数据送到另外一个函数去处理
clsOther.DealData(strTemp);

objSocketHandler.BeginReceive(objStateObject.btBuffer,0,StateObject.intBufferSize,0,new AsyncCallback(ReadCallback),objStateObject);
}

同时为了在线程中同步,建立了一个公共类Parameter,变量为public static intCounter
为了防止多个线程同时操作intCounter出现错误,所以使用LOCK语句;
但是clsOther.DealData(strTemp)需要先对数据进行检验,然后对合法数据处理,并修改Parameter.intCounter,请问LOCK语句应该写在哪里,才能实现多个线程同时操作intCounter出现错误??????????????????????
...全文
168 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
amendajing 2005-03-09
  • 打赏
  • 举报
回复
mark
elite2018 2005-03-09
  • 打赏
  • 举报
回复
一般的instance变量或者reference变量可以直接使用lock(this)的方法进行保护操作。但对于static变量,我们可以使用lock(typof(class))的方法来进行保护操作。
roseguns 2004-11-09
  • 打赏
  • 举报
回复
我刚才试了一下jkflyfox(飞狐) ( ) 信誉:100 说的方法,挺好用的。
建议你试一试,我最近也在写这方面的应面呢。
jiank 2004-11-09
  • 打赏
  • 举报
回复
二楼的兄弟说得对
revel 2004-11-09
  • 打赏
  • 举报
回复
学习中
520NET 2004-11-09
  • 打赏
  • 举报
回复
LG
jimh 2004-11-09
  • 打赏
  • 举报
回复
同意楼上的
jkflyfox 2004-10-31
  • 打赏
  • 举报
回复
你可以将lock语句放在对intCounter进行写操作的代码块前
lock(intCounter)
{
do something with intCounter
}

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧