2016-09-19 66 views
2

Supose我有几个线程和委托运行的方法。多线程和委托调用

public delegate void Del(string threadId, string value, ref string result); 

public event Del Analyze= null; // The external world can plug in a method 


// this method runs simultanioulsy in several threads 
private void threaded() 
{ 
    string s= null; 
    // yadayada s gets a value and I want a result back 
    // from the external world 
    string result = null; 

    is (Analyze != null) 
     Analyze("some thread id", s, ref result); 
} 

我知道,作为事件的方法必须按顺序同步线程安全的,等等,但会发生什么,如果

Analyze("some thread id", s, ref result); 

被称为在同一时间?这可以吗?或者我需要同步分析,如:

lock(someobj) 
{ 
    Analyze("some thread id", s, ref result); 
} 

所以,问题更像是:是一个“事件”这样的线程的视图调用类的点(我知道我必须保证线程安全安全在方法的插入式)

+0

是的,在使用多线程共享的资源时,您应该始终进行同步。 –

+0

@ rory.ap这肯定取决于“Analyze(...)'是否修改状态? –

+0

@ScottPerham我希望它能做到,否则在参数'ref'中没有意义。 – itsme86

回答

2

引发事件可以这样做的同时多线程的,如果这是你想要的行为的类。 “事件”就像按顺序调用的方法列表。

每一个单独的线程将被提高一个单独的事件,正如你说这是事件处理程序的责任来应对被称为由独立的事件多线程的可能性,如果这是该事件是如何设计的。从视类引发事件的点

线程安全是不是你所要求的,因为你是混合方面一个很好的说明。线程的安全性是关于一个类是否可以在多线程情况下被安全地调用,以确保这些线程不会通过类的状态进行交互。