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

◆ EnterSpin()

void System.Threading.ReaderWriterLockSlim.SpinLock.EnterSpin ( EnterSpinLockReason reason)
inlineprivate

Definition at line 116 of file ReaderWriterLockSlim.cs.

117 {
118 int enterDeprioritizationStateChange = GetEnterDeprioritizationStateChange(reason);
119 if (enterDeprioritizationStateChange != 0)
120 {
121 Interlocked.Add(ref _enterDeprioritizationState, enterDeprioritizationStateChange);
122 }
123 int processorCount = Environment.ProcessorCount;
124 int num = 0;
125 while (true)
126 {
127 if (num < 10 && processorCount > 1)
128 {
129 Thread.SpinWait(20 * (num + 1));
130 }
131 else if (num < 15)
132 {
133 Thread.Sleep(0);
134 }
135 else
136 {
137 Thread.Sleep(1);
138 }
139 if (!IsEnterDeprioritized(reason))
140 {
141 if (_isLocked == 0 && TryEnter())
142 {
143 break;
144 }
145 }
146 else if (num >= 20)
147 {
148 reason |= EnterSpinLockReason.Wait;
149 num = -1;
150 }
151 num++;
152 }
153 if (enterDeprioritizationStateChange != 0)
154 {
155 Interlocked.Add(ref _enterDeprioritizationState, -enterDeprioritizationStateChange);
156 }
157 }
static int GetEnterDeprioritizationStateChange(EnterSpinLockReason reason)
bool IsEnterDeprioritized(EnterSpinLockReason reason)

References System.Threading.ReaderWriterLockSlim.SpinLock._enterDeprioritizationState, System.Threading.ReaderWriterLockSlim.SpinLock._isLocked, System.Threading.Interlocked.Add(), System.Threading.ReaderWriterLockSlim.SpinLock.GetEnterDeprioritizationStateChange(), System.Threading.ReaderWriterLockSlim.SpinLock.IsEnterDeprioritized(), System.Environment.ProcessorCount, System.Threading.Thread.Sleep(), System.Threading.Thread.SpinWait(), and System.Threading.ReaderWriterLockSlim.SpinLock.TryEnter().

Referenced by System.Threading.ReaderWriterLockSlim.SpinLock.Enter().