ConcurrentQueue<T>.TryDequeue(T) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
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
합니다.
적용 대상
추가 정보
.NET