0
우리는 construtor에서 데이터를 반환하기 위해 콜백 스레드를 사용하는 외부 데이터 공급자가 있습니다.GUI 쓰레드에 대한 모든 콜백 - 멀티 쓰레딩 문제는 가능한가?
스레딩과 관련된 시스템에서 몇 가지 문제가 있지만 이론 상으로는 콜백이 모두 같은 스레드에서 반환되어야하기 때문에 불가능할 수 있습니다.
제 질문은 스레드 코드가 필요합니까?
class Foo
{
ExternalDataProvider _provider;
public Foo()
{
// This is the c'tor for the xternal data provider, taking a callback loop as param
_provider = new ExternalDataProvider(UILoop);
_provider.DataArrived += ExternalProviderCallbackMethod;
}
public ExternalProviderCallbackMethod(...)
{
//...(code omitted)
var itemArray[] = new String[4] { "item1", "item2", "item3", "item4" };
for (int i = 0; i < itemArray.Length; i++)
{
string s = itemArray[i];
switch(s)
{
case "item1":
DoItem1Action();
break;
case "item2":
DoItem2Action();
break;
default:
DoDefaultAction();
break;
}
//...(code omitted)
}
}
}
문제
은 매우 드물게, DoItem2Action이 DoItem1Action가 exectuing해야 executingwhen되어 있다는 점이다.실을 꿰는 것은 가능합니까? 이론 상으로는 모든 콜백이 같은 스레드에 도착하기 때문에 직렬화되어야합니다. 맞습니까? 그래서 여기에 스레드 동기화가 필요하지 않아야합니까?
감사합니다. 이것은 매우 못생긴 코드의 간소화 된 버전이지만, 재진입 문서는 매우 흥미 롭습니다. – miguel
이것은 다른 스레딩 스레드의 첫 번째 응답이 재진입 적이므로 스레드 안전성을 의미하지 않습니까? http://stackoverflow.com/questions/2779649/thread-local-storage-and-local-method-variables – miguel
또한 액션 메소드가 재진입한다는 보장은 없습니까? – miguel