由于项目需要,我的项目中要用到多线程。在系统中我共开启了5个线程
在开始时,我是使用Suspend()和Resume()来挂起和开启线程,但在2.0中
系统已经将这连个对象视为过时(防止死锁的发生)。请问大家有没有好的解决方法
代替它们,例如用Monitor、Mutex等来挂起所有的线程和继续开启所有线程。谢谢了!
在开始时,我是使用Suspend()和Resume()来挂起和开启线程,但在2.0中
系统已经将这连个对象视为过时(防止死锁的发生)。请问大家有没有好的解决方法
代替它们,例如用Monitor、Mutex等来挂起所有的线程和继续开启所有线程。谢谢了!
实例函数Thread.Suspend和Thread.Resume在2.0版本下被标为obsolete.编译使用这2个函数的代码会得到
使用System.Threading中的其他类,如Monitor, Mutex, Event, 和Semaphore,以同步线程和保护资源。
Thread.Suspend和Thread.Resume被废弃的主要原因是因为其使用很容易造成线程死锁(Deadlock)。
Thread.Sleep的使用在.NET 2.0下不受影响。
http://www.cnblogs.com/xd125/archive/2007/12/12/992406.html
我知道不能用,系统容易出现死锁。
虽然Thread.Sleep是可以用,但用户暂停的时间有多长呢?我们不清楚。
不可能将sleep值设置非常大然后去等吧。
我那问题是5个线程同时访问一个泛型对象,并发的问题解决了,
现在就是如何挂起所有线程和继续所有所有线程。谢谢大家,请大家出出注意!
由泛型对象来保护它自己,这简化了多线程处理。...挂起所有线程和继续所有所有线程...
要合理的管理线程,重要的一点是管理任务的颗粒性,就是要能够把一个长的任务分解成一些小的任务。
每次做完小任务后,查阅调度者的通知,并根据通知进行等待,或继续执行,比如下面的玩具例子:
volatile bool paused;
ManualResetEvent resumeEvent = new ManualResetEvent(false);void MyThread()
{
for (int i = 0; i < 100; i++)
{
if (paused)
{
resumeEvent.WaitOne();
} DoWork();
}
}void Pause()
{
resumeEvent.Reset();
paused = true;
}void Resume()
{
paused = false;
resumeEvent.Set();
}