2013-03-12 2 views
0
lock("data"){ 
    if(_requestList.Count>1 && _requestList[1]==null){ 
     Debug.Log("why0"); 
    } 
    _requestList.RemoveAt(0); 
    if(_requestList.Count > 0 && _requestList[0] == null){ 
     Debug.Log("why1"); 
    } 
    doSomething(); 
} 

_requestList 오류 <T> .RemoveAt는()

때로는 "why0"때때로 "why1"를 기록 문자열

의 목록입니다, 때로는 둘, 때로는 아무것도.

추가 된 요소는 절대로 null이 아닙니다.

그래서? 모든

+0

로그 내용이 '_requestList'이고 거기에 무슨 일이 일어나고 있는지 확인하십시오. –

+0

_requestList가 각 경우에 가지고있는 값을 알 수 있습니까? –

+0

왜 일부 공유 변수 대신 "데이터"를 사용하여 잠금을 수행합니까? – nsconnector

답변

4

먼저 당신은 당신이 목록에 추가하는 경우 또한 주위 어디서나 lock(lockObject)을 넣을 필요가

private readonly object lockObject = new object(); 

lock(lockObject) 
{ 

} 

를 사용해야합니다.

희망에 도움이되기를 바랍니다.

스레딩을 걱정하지 않으려는 경우 ConcurrentBag을 조사 할 수도 있습니다.

+0

강력한 thread-safe 구현을 위해 ConcurrentBag 제안. –

+0

아직 작동하지 않지만 대단히 감사합니다. 나는 세부 사항을 추적 할 것이다. unity3d에는 .NET 2.0 만 있습니다. 그래서 나는 ConcurrentBag, o (╯ □ ╰) o를 사용할 수 없다. – flyingSnow