关于多线程操作同一对象出现死锁的问题
我要同时运行多个线程,在线程中调用好多类,在这些类中都要对同一对象进行操作。怎么处理能最大限度的避免死锁情况。
------解决方案--------------------try
lock(object)
{
}
------解决方案--------------------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());
------解决方案--------------------要用多线程,就应该好好研究MSDN里提供的东西,你找不到更合用的了
------解决方案--------------------你的类只是向操作系统提出画图的要求,绘图的过程操作系统会自己完成的。
------解决方案--------------------楼主应该去看看操作系统概论的书,上面有几种模型——读者,写者模型、生产者,消费者模型。还有好多算法,如银行家算法。可以考虑自己实现算法
------解决方案--------------------首先要搞清楚概念,到底什么是死锁! 死锁指的不是多个线程同时操作某个资源,而造成获取了错误数据的结果,而是因为几个线程因为资源争夺,谁也无法得到必要的资源,结果互相等待,谁也运行不了。
lock,Monitor 等等都是线程同步用的,这些不是用来避免死锁的,而恰恰是因为运用了这些才造成了产生死锁的可能,如果你完全不用这些线程同步的对象,那才是绝对不会产生死锁的。在多线程编程中,使用了lock,monitor等等。。如果没有非常认真的想清楚程序逻辑,或锁正某个对象时间过长,都极可能造成死锁。
关于死锁的一个经典问题是哲学家就餐问题,楼主可以参考一下。至于楼主所说的问题,则一定要知道你的具体情况是什么,才能知道怎么样去解决。。。