关于多线程的Lock的问题我有三个线程在运行,
每个线程结束后都引发一个主线程的同一个事件。请问,这个事件用Lock么?

解决方案 »

  1.   

    要,因为每个线程的执行时间会不一样,而主线程的函数只能给一个线程以调用,为了函数里的数据安全,所以要LOCK
      

  2.   

    Lock就是为解决多进程访问冲突用的。
    引发的事件内会不会有冲突,决定是不是加锁。
    如果你只是读取一个属性状态,就没关系,
    如果有改变值(写)操作的,就应该加锁.
      

  3.   

     MSDN上的内容下面的规则概括了实现线程处理的设计指南: 避免提供改变静态状态的静态方法。在通用服务器方案中,静态状态在请求间共享,这意味着多个线程可以同时执行该代码。这造成了产生线程处理错误的可能性。考虑使用将数据封装为不在请求间共享的实例的设计方案。静态状态必须是线程安全的。 实例状态不必是线程安全的。默认情况下,类库应该不应是线程安全的。用添加锁的方法创建线程安全代码会降低性能、增加锁争用和造成发生死锁错误的可能性。在通用应用程序模型中,一次只有一个线程执行用户代码,这使线程安全需要减为最小。因此,.NET Framework 类库在默认情况下不是线程安全的。如果希望提供线程安全的版本,请提供返回类型的线程安全实例的静态 Synchronized 方法。有关示例,请参见 System.Collections.ArrayList.Synchronized 方法和 System.Collections.ArrayList.IsSynchronized 方法。在设计库时考虑服务器方案中的运行压力。尽可能避免使用锁。注意锁定部分中的方法调用。当 A 类中的静态方法调用 B 类中的静态方法时会导致死锁,反之亦然。如果 A 和 B 都同步它们的静态方法,这将导致死锁。可能只有在沉重的线程处理压力下才会发现此死锁。 当 A 类中的静态方法调用 A 类中的静态方法时会导致性能问题。如果这些方法未被正确分解,由于将有大量的冗余同步,因此性能将遭受损失。过度使用粒度同步可能会对性能造成负面影响。另外,它对可缩放性可能有严重的负面影响。 注意 lock 语句(在 Visual Basic 中为 SyncLock)的问题。您可能会想用 lock 语句解决所有线程处理问题。但是,对于必须是原子性的更新来说,System.Threading.Interlocked 类具有优先权。如果没有争用,它执行单个 lock 前缀。在代码检查中,应该注意检查有没有下面的示例中所展示的这类实
      

  4.   

    很简单,可以使用volatile bool change=false;可以被多个线程访问,当有任何一个线程访问过主线程事件时就置为true,所有线程调用主线程事件前都检测此变量,就可以确定主线程事件是否被调用过。
      

  5.   


    理由
    假如你主线程向一个集合里放东西 另外3个拿 如果不锁定 可能要拿的东西已经被前一个人拿走了 就会报错
    即使你判断if(items.Count>0)也没用
      

  6.   


    private object obj=new object();
    public void MainThreadMethod()
    {
       lock(obj)
       {
         //代码
       }
    }
      

  7.   

    lock是一段时间内,只允许一个进程或者线程在调用此段代码,注意多线程是允许代码段被共享的,由于你有3个线程会公用使用这个主进程的代码,所以要加锁!
    不知道这么答复,你是否满意!