다음을 통해 공유


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

정의

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

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에는 제거된 개체가 들어 있습니다. 제거할 수 있는 개체가 없으면 이 값은 지정되지 않습니다.

반환

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

설명

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

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

적용 대상

추가 정보