ConcurrentQueue<T>.TryDequeue(T) 메서드

정의

동시 큐의 시작 부분에서 개체를 제거하고 반환하려고 시도합니다.

public:
 bool TryDequeue([Runtime::InteropServices::Out] T % result);
public bool TryDequeue(out T result);
member this.TryDequeue : 'T -> bool
Public Function TryDequeue (ByRef result As T) As Boolean

매개 변수

result
T

이 메서드가 반환될 때 작업이 성공 result 하면 제거된 개체가 포함됩니다. 제거할 수 있는 개체가 없으면 값이 지정되지 않습니다.

반품

true 요소가 성공적으로 시작 ConcurrentQueue<T> 부분에서 제거되고 반환되었으면 이고, false그렇지 않으면 .

설명

ConcurrentQueue<T> 는 모든 동기화를 내부적으로 처리합니다. 두 스레드가 정확히 같은 순간에 호출 TryDequeue 하는 경우 두 작업이 모두 차단되지 않습니다. 두 스레드 간에 충돌이 감지되면 한 스레드가 다시 시도하여 다음 요소를 검색해야 하며 동기화가 내부적으로 처리됩니다.

TryDequeue 는 큐에서 요소를 제거하려고 합니다. 메서드가 성공하면 항목이 제거되고 메서드가 반환 true되고, 그렇지 않으면 반환됩니다 false. 이는 큐의 다른 작업과 관련하여 원자성으로 발생합니다. 큐가 같은 코드로 q.Enqueue("a"); q.Enqueue("b"); q.Enqueue("c"); 채워지고 두 스레드가 동시에 요소를 큐에서 제거하려고 하면 한 스레드가 큐 a 에서 제거되고 다른 스레드는 큐에서 제거 b됩니다. 두 호출 TryDequeue 모두 요소를 큐에서 해제할 수 있었기 때문에 반환 true됩니다. 각 스레드가 추가 요소를 큐에서 제거하려면 스레드 중 하나가 큐 c 에서 제거되고 반환 true되는 반면, 다른 스레드는 큐를 비워 두고 반환 false합니다.

적용 대상

추가 정보