程序监视某些文件(每个观察者在不同的线程上运行),当检测到更改时,它会调用方法调用Notify()
。 Notify()
方法只是发送电子邮件。
如果两个或多个线程同时检测到更改,并同时调用Notify()
,这是一个问题吗?
我猜测,因为Notify()
没有访问任何无法多次打开的文件或任何此类事情,所以多线程调用Notify()
应该没有问题同时。但我可能是错的。
如果我错了,在调用Lock(object)
之前创建对象并使用Notify()
是最好的方法吗?
答案 0 :(得分:2)
如果多个线程需要访问共享状态(静态或非静态)并且其中一些线程试图更改,则需要锁定。如果他们所做的只是读取,那么他们可以安全来访问它。此外,如果你没有共享状态,那就没关系了。
答案 1 :(得分:2)
如果notify方法使用共享资源(如Notify()方法正在使用的静态变量),则可能存在一些线程问题并且可能需要锁定,否则将不会出现问题。
答案 2 :(得分:2)
您需要执行任何锁定的唯一原因是Notify()
内的变量可能会被同时运行的多个Notify()
实例更改。
因此,假设您有List<>
个已检测到的文件(例如,为了防止重新通知),并且您的Notify()
方法会将检测到的文件添加到List<>
。多个Notify()
实例可能会同时尝试访问该列表,在这种情况下,您会考虑锁定(或以其他方式同步)List<>
。
从你所描述的情况来看,我认为你不必担心它。