【发布时间】:2010-07-19 03:53:55
【问题描述】:
我创建了一个对象,该对象具有处理不同类型事件的特定方法,并且将一直存在到我的应用程序运行之前。我还创建了指向每个方法的单个委托,并引用了 x 个线程。给定 y 和 z 线程将通过使用指向它的委托来调用 method1 ,z 线程是否会等待 y 线程完成才能使用 method1 ?或者他们可以同时调用它?
【问题讨论】:
标签: c# .net multithreading delegates
我创建了一个对象,该对象具有处理不同类型事件的特定方法,并且将一直存在到我的应用程序运行之前。我还创建了指向每个方法的单个委托,并引用了 x 个线程。给定 y 和 z 线程将通过使用指向它的委托来调用 method1 ,z 线程是否会等待 y 线程完成才能使用 method1 ?或者他们可以同时调用它?
【问题讨论】:
标签: c# .net multithreading delegates
除非您使用锁定或其他类型的互斥锁,否则每个线程将并行调用委托背后的方法。他们不会互相等待。
这就是线程安全发挥作用的地方。两个不同的线程同时执行一个方法本身并没有什么坏处,但是如果该方法触及其所有者类的实例成员并且这两个线程同时针对单个实例工作,您将面临线程冲突和错误的风险从致命错误到奇怪、微妙和难以重现的行为。我的经验法则是在可以避免的情况下不要混合线程和状态。
【讨论】: