버그 해결을 위한 모든 질문을 던져
0 votes
281 views
유니티에서 멀티스레드를 구현하고 있었습니다

Queue를 먼저 선언해놓고 여러 스레드에서 enqueue하거나 dequeue합니다.

 

그런데 가끔 동시에 읽는 경우가 있습니다.

Queue에서는 읽음과 동시에 데이터가 빠져나온다고 알았는데

스레드가 동시에 접근할수가 있는건가요?
asked (35 point) , 281 views

3 answers

0 votes
우수 답변
Thread safe queue 로 검색해보면 다종다양한 답변들이 주루루룩 나옵니다.
컬렉션 컨테이너들의 멀티 스레드 접근에 대한 안전한 버전은 왠만하면 다 있더라고요.
 
 

 

answered (215 point)
선택됨
0 votes
멀티스레드에 안전한 ConcurrentQueue 라는 것이 있습니다

https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.concurrent.concurrentqueue-1?view=net-5.0

ConcurrentBag, ConcurrentDictionary, ConcurrentStack 같은 것들도 있고요
answered (60 point)
0 votes

큐에 접근할 때 lock을 사용하는 방법도 있죠.

Queue myCollection = new Queue();
lock(myCollection.SyncRoot)
{
    foreach (object item in myCollection)
    {
        // Insert your code here.
    }
}

https://docs.microsoft.com/ko-kr/dotnet/api/system.collections.queue.synchronized?view=netframework-3.5

ConcurrentQueue는 내부적으로는 링크드 리스트라서 lock 보다는 속도가 빠르지만, 메모리는 조금 더 쓴다는 얘기가 있네요.

그리고 ConcurrentQueue는 닷넷4.0 이상부터 지원되는 거라서 유니티 버전에 따라 사용 못할 수도 있겠네요.

answered (572 point)
수정됨

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

507 질문
656 answers
643 댓글
118,128 users