Thread.Suspend()已过时...多线程

jackeylb 2008-12-28 10:13:41
由于项目需要,我的项目中要用到多线程。在系统中我共开启了5个线程
在开始时,我是使用Suspend()和Resume()来挂起和开启线程,但在2.0中
系统已经将这连个对象视为过时(防止死锁的发生)。请问大家有没有好的解决方法
代替它们,例如用Monitor、Mutex等来挂起所有的线程和继续开启所有线程。谢谢了!
...全文
4025 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lipengtao321 2012-10-15
  • 打赏
  • 举报
回复
学习了,谢谢分享
iawjdltjq 2010-08-18
  • 打赏
  • 举报
回复
DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
sunsnowcg 2010-07-16
  • 打赏
  • 举报
回复
学习一下,这个问题很烦恼
austo 2009-11-22
  • 打赏
  • 举报
回复
学习,呵呵
jackeylb 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gomoku 的回复:]
...我那问题是5个线程同时访问一个泛型对象...
由泛型对象来保护它自己,这简化了多线程处理。

...挂起所有线程和继续所有所有线程...
要合理的管理线程,重要的一点是管理任务的颗粒性,就是要能够把一个长的任务分解成一些小的任务。
每次做完小任务后,查阅调度者的通知,并根据通知进行等待,或继续执行,比如下面的玩具例子:


C# code
volatile bool paused;
ManualResetEvent resumeEvent = new ManualR…
[/Quote]

多谢!请你吃饭啊
gomoku 2008-12-28
  • 打赏
  • 举报
回复
...我那问题是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();
}

jackeylb 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyq11 的回复:]
Thread.Suspend和Thread.Resume被废弃
实例函数Thread.Suspend和Thread.Resume在2.0版本下被标为obsolete.编译使用这2个函数的代码会得到
使用System.Threading中的其他类,如Monitor, Mutex, Event, 和Semaphore,以同步线程和保护资源。
Thread.Suspend和Thread.Resume被废弃的主要原因是因为其使用很容易造成线程死锁(Deadlock)。
Thread.Sleep的使用在.NET 2.0下不受影响。
[/Quote]

我知道不能用,系统容易出现死锁。
虽然Thread.Sleep是可以用,但用户暂停的时间有多长呢?我们不清楚。
不可能将sleep值设置非常大然后去等吧。
我那问题是5个线程同时访问一个泛型对象,并发的问题解决了,
现在就是如何挂起所有线程和继续所有所有线程。谢谢大家,请大家出出注意!
qinhl99 2008-12-28
  • 打赏
  • 举报
回复
参考下这里的文章:
http://www.cnblogs.com/xd125/archive/2007/12/12/992406.html
wuyq11 2008-12-28
  • 打赏
  • 举报
回复
Thread.Suspend和Thread.Resume被废弃
实例函数Thread.Suspend和Thread.Resume在2.0版本下被标为obsolete.编译使用这2个函数的代码会得到
使用System.Threading中的其他类,如Monitor, Mutex, Event, 和Semaphore,以同步线程和保护资源。
Thread.Suspend和Thread.Resume被废弃的主要原因是因为其使用很容易造成线程死锁(Deadlock)。
Thread.Sleep的使用在.NET 2.0下不受影响。
长沙三毛 2008-12-28
  • 打赏
  • 举报
回复
俺的做法:在线程中使用变量控制stop/run,使用线程:Join等待全部线程执行结束

111,125

社区成员

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

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

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