Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ TryEnqueue()

Definition at line 133 of file ConcurrentQueueSegment.cs.

134 {
135 Slot[] slots = _slots;
136 while (true)
137 {
138 int num = Volatile.Read(ref _headAndTail.Tail);
139 int num2 = num & _slotsMask;
140 int num3 = Volatile.Read(ref slots[num2].SequenceNumber);
141 int num4 = num3 - num;
142 if (num4 == 0)
143 {
144 if (Interlocked.CompareExchange(ref _headAndTail.Tail, num + 1, num) == num)
145 {
146 slots[num2].Item = item;
147 Volatile.Write(ref slots[num2].SequenceNumber, num + 1);
148 return true;
149 }
150 }
151 else if (num4 < 0)
152 {
153 break;
154 }
155 }
156 return false;
157 }
static int CompareExchange(ref int location1, int value, int comparand)
static bool Read(ref bool location)
Definition Volatile.cs:67
static void Write(ref bool location, bool value)
Definition Volatile.cs:74

References System.Collections.Concurrent.ConcurrentQueueSegment< T >._headAndTail, System.Collections.Concurrent.ConcurrentQueueSegment< T >._slots, System.Collections.Concurrent.ConcurrentQueueSegment< T >._slotsMask, System.Threading.Interlocked.CompareExchange(), System.Collections.Concurrent.ConcurrentQueueSegment< T >.Slot.Item, System.item, System.Threading.Volatile.Read(), System.Collections.Concurrent.PaddedHeadAndTail.Tail, and System.Threading.Volatile.Write().