socket多线程调用同一个方法,加锁之后想先让每个进来的线程睡200毫秒,这样能实现吗? 5
publicvoidSend(stringtxtstr){objectlockthis=newobject();lock(lockthis){Thread.Sleep(2...
public void Send(string txtstr){
object lockthis = new object();
lock (lockthis)
{
Thread.Sleep(200);
_tcpclient.Client.Send(Encoding.Unicode.GetBytes(txtstr));
}
}
如果AB线程同时调用,是不是A先睡 200,然后执行,B再睡200,再执行? 展开
object lockthis = new object();
lock (lockthis)
{
Thread.Sleep(200);
_tcpclient.Client.Send(Encoding.Unicode.GetBytes(txtstr));
}
}
如果AB线程同时调用,是不是A先睡 200,然后执行,B再睡200,再执行? 展开
1个回答
展开全部
lock (lockthis);是不是要加分号?
如果AB线程同时调用,这个就是对所锁的理解了。
当先执行的线程,锁生命周期结束后,即释放后,才会执行另一个线程。
如果要实现你说的
{
lock (lockthis)
Thread.Sleep(200);
}
这样是可以的,但是具体的执行情况可能跟你想的不一样,因为我们没有对两个线程进行严格控件。
系统会为每个线程分配时间片,而切换工作都是由系统完成的。比如,上面的写法,就会使先执行的肯定会睡眠200毫秒,但是此时,另一个线程执行到什么位置,我们是不知道的,只能说同时执行到这段语句时,过程基本跟你说的一样。
如果AB线程同时调用,这个就是对所锁的理解了。
当先执行的线程,锁生命周期结束后,即释放后,才会执行另一个线程。
如果要实现你说的
{
lock (lockthis)
Thread.Sleep(200);
}
这样是可以的,但是具体的执行情况可能跟你想的不一样,因为我们没有对两个线程进行严格控件。
系统会为每个线程分配时间片,而切换工作都是由系统完成的。比如,上面的写法,就会使先执行的肯定会睡眠200毫秒,但是此时,另一个线程执行到什么位置,我们是不知道的,只能说同时执行到这段语句时,过程基本跟你说的一样。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询