关于多线程操作同一对象出现死锁的问题

ziqing 2007-03-15 01:36:23
我要同时运行多个线程,在线程中调用好多类,在这些类中都要对同一对象进行操作。怎么处理能最大限度的避免死锁情况。
...全文
779 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
honkerhero 2007-03-16
  • 打赏
  • 举报
回复
lock不能锁方法,它锁的是属性

用mutex,但他的范围一定要小,在马上要操作的时候再锁,用完马上解开
快乐小Y 2007-03-16
  • 打赏
  • 举报
回复
唉,LZ的心情我明白
用这个
lock(this)
{}
或者用Semaphores试试
foyuan 2007-03-16
  • 打赏
  • 举报
回复
lock(this)
{}
ziqing 2007-03-16
  • 打赏
  • 举报
回复
顶!
haiwangstar 2007-03-16
  • 打赏
  • 举报
回复
首先要搞清楚概念,到底什么是死锁! 死锁指的不是多个线程同时操作某个资源,而造成获取了错误数据的结果,而是因为几个线程因为资源争夺,谁也无法得到必要的资源,结果互相等待,谁也运行不了。
lock,Monitor 等等都是线程同步用的,这些不是用来避免死锁的,而恰恰是因为运用了这些才造成了产生死锁的可能,如果你完全不用这些线程同步的对象,那才是绝对不会产生死锁的。在多线程编程中,使用了lock,monitor等等。。如果没有非常认真的想清楚程序逻辑,或锁正某个对象时间过长,都极可能造成死锁。

关于死锁的一个经典问题是哲学家就餐问题,楼主可以参考一下。至于楼主所说的问题,则一定要知道你的具体情况是什么,才能知道怎么样去解决。。。
jc8futao 2007-03-16
  • 打赏
  • 举报
回复
楼主应该去看看操作系统概论的书,上面有几种模型——读者,写者模型、生产者,消费者模型。还有好多算法,如银行家算法。可以考虑自己实现算法
jc8futao 2007-03-16
  • 打赏
  • 举报
回复
你的类只是向操作系统提出画图的要求,绘图的过程操作系统会自己完成的。
frland 2007-03-15
  • 打赏
  • 举报
回复
要用多线程,就应该好好研究MSDN里提供的东西,你找不到更合用的了
li45214521 2007-03-15
  • 打赏
  • 举报
回复
mutex 可以限制只是一个线程访问
bool bCreatedNew;
//Create a new mutex using specific mutex name
Mutex m =new Mutex( false, "myUniqueName", out bCreatedNew );
if( bCreatedNew )
Application.Run(new yourFormName());
li45214521 2007-03-15
  • 打赏
  • 举报
回复
System.Object lockThis = new System.Object();
lock(lockThis)
{
// Access thread-sensitive resources.
}
.................................................
灰太狼 2007-03-15
  • 打赏
  • 举报
回复
在同一时刻只许一个线程操作这个类
灰太狼 2007-03-15
  • 打赏
  • 举报
回复
在两个线程的开始处用mutex来锁定。
ziqing 2007-03-15
  • 打赏
  • 举报
回复
顶!
ziqing 2007-03-15
  • 打赏
  • 举报
回复
lock后面的东西不是锁的目标,它只是个标志量
=============================================
有这种情况,同时有两个线程,分别调用两个类的方法进行修改同一对象,怎样加锁!!
lr21shiji 2007-03-15
  • 打赏
  • 举报
回复
lock
sunrobust 2007-03-15
  • 打赏
  • 举报
回复
lock后面的东西不是锁的目标,它只是个标志量.
ziqing 2007-03-15
  • 打赏
  • 举报
回复
谢谢楼上的,
灰太狼 2007-03-15
  • 打赏
  • 举报
回复
參看
http://blog.csdn.net/tjvictor/archive/2007/01/20/1488290.aspx
有沒有幫助
ziqing 2007-03-15
  • 打赏
  • 举报
回复
现在是这种情况,我要用多线程在一个画布上画图形,有画圆的类,有画线的类,
还有画三角的类,每一个类里面要对往画布上绘制图形。怎么对每个类的绘制代码块进行加锁!
ziqing 2007-03-15
  • 打赏
  • 举报
回复
viena(维也纳nn)
是的,在多个类中都要对同一个对象进行引用,操作,
加载更多回复(8)

110,539

社区成员

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

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

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