9[DebuggerDisplay(
"Count = {Count}")]
19 bool ICollection.IsSynchronized =>
false;
21 object ICollection.SyncRoot
63 else if (head._nextSegment == tail)
169 if (head != tail && head != tail -
s.FreezeOffset)
171 head &=
s._slotsMask;
172 tail &=
s._slotsMask;
175 return s._slots.Length - head + tail;
189 num2 &= head._slotsMask;
196 num += nextSegment._headAndTail.Tail -
nextSegment.FreezeOffset;
198 num +=
tailTail - tail.FreezeOffset;
242 concurrentQueueSegment._preservedForObservation =
true;
249 tail.EnsureFrozenForEnqueues();
257 int num = (i + 1) &
segment._slotsMask;
258 if ((
segment._slots[i].SequenceNumber &
segment._slotsMask) != num)
285 for (
int l =
headHead;
l < head._slots.Length;
l++)
301 int l = s._headAndTail.Tail -
s.FreezeOffset;
302 for (
int j = 0;
j <
l;
j++)
327 if (tail.TryEnqueue(
item))
335 tail.EnsureFrozenForEnqueues();
336 int boundedLength = (tail._preservedForObservation ? 32 :
Math.
Min(tail.Capacity * 2, 1048576));
346 if (head.TryDequeue(
out result))
350 if (head._nextSegment ==
null)
367 if (head._nextSegment ==
null)
380 _head = head._nextSegment;
419 _tail.EnsureFrozenForEnqueues();
bool TryPeek([MaybeNullWhen(false)] out T result)
void SnapForObservation(out ConcurrentQueueSegment< T > head, out int headHead, out ConcurrentQueueSegment< T > tail, out int tailTail)
readonly object _crossSegmentLock
ConcurrentQueue(IEnumerable< T > collection)
bool TryDequeue([MaybeNullWhen(false)] out T result)
volatile ConcurrentQueueSegment< T > _tail
static int GetCount(ConcurrentQueueSegment< T > s, int head, int tail)
void ICollection. CopyTo(Array array, int index)
volatile ConcurrentQueueSegment< T > _head
bool TryDequeueSlow([MaybeNullWhen(false)] out T item)
IEnumerator< T > GetEnumerator()
static IEnumerator< T > Enumerate(ConcurrentQueueSegment< T > head, int headHead, ConcurrentQueueSegment< T > tail, int tailTail)
static T GetItemWhenAvailable(ConcurrentQueueSegment< T > segment, int i)
void CopyTo(T[] array, int index)
bool TryPeek([MaybeNullWhen(false)] out T result, bool resultUsed)
static long GetCount(ConcurrentQueueSegment< T > head, int headHead, ConcurrentQueueSegment< T > tail, int tailTail)
bool TryAdd(TKey key, TValue value)
static byte Min(byte val1, byte val2)
static uint RoundUpToPowerOf2(uint value)
static bool Read(ref bool location)
static void ThrowNotSupportedException(ExceptionResource resource)
static void ThrowArgumentOutOfRangeException(System.ExceptionArgument argument)
static void ThrowArgumentNullException(string name)
static void ThrowArgumentException(ExceptionResource resource)
void CopyTo(Array array, int index)
IEnumerator GetEnumerator()