多线程和委托执行
问题描述:
我创建了一个对象,该对象具有处理不同种类的事件的特定方法,并且将一直存在,直到我的应用程序正在运行。我还创建了指向每种方法的单个委托,并引用了x个线程。假设y和z线程将通过使用指向它的委托调用method1,那么z线程是否会等待y线程完成,然后才能使用method1?或者他们可以同时调用它?多线程和委托执行
答
除非您使用锁定或其他类型的互斥锁,否则每个线程将并行调用委托后面的方法。他们不会等待对方。
这就是线程安全起作用的地方。对于两个不同的线程同时执行一个方法并没有什么坏处,但是如果该方法触及其拥有者类的实例成员,并且这两个线程同时针对单个实例工作,则可能会导致线程冲突和错误从致命的错误到奇怪,微妙和难以重现的行为。我的经验法则是当我可以避免它时,不要混合线程和状态。
感谢您的更新。如果我要提供一些锁定机制,它是正在处理的对象的一部分,例如SyncRoot对象,这是否会使其他线程等待其他线程?或者等待的唯一线程将是正在处理同一个对象的线程? – powerbox 2010-07-21 06:16:12