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

◆ ExitAndWakeUpAppropriateWaitersPreferringWriters()

void System.Threading.ReaderWriterLockSlim.ExitAndWakeUpAppropriateWaitersPreferringWriters ( )
inlineprivate

Definition at line 1058 of file ReaderWriterLockSlim.cs.

1059 {
1060 uint numReaders = GetNumReaders();
1061 if (_fIsReentrant && _numWriteUpgradeWaiters != 0 && _fUpgradeThreadHoldingRead && numReaders == 2)
1062 {
1063 _spinLock.Exit();
1065 }
1066 else if (numReaders == 1 && _numWriteUpgradeWaiters != 0)
1067 {
1068 _spinLock.Exit();
1070 }
1071 else if (numReaders == 0 && _numWriteWaiters != 0)
1072 {
1073 WaiterStates waiterStates = _waiterStates & WaiterStates.WriteWaiterSignaled;
1074 if (waiterStates == WaiterStates.None)
1075 {
1076 _waiterStates |= WaiterStates.WriteWaiterSignaled;
1077 }
1078 _spinLock.Exit();
1079 if (waiterStates == WaiterStates.None)
1080 {
1081 _writeEvent.Set();
1082 }
1083 }
1084 else
1085 {
1087 }
1088 }

References System.Threading.ReaderWriterLockSlim._fIsReentrant, System.Threading.ReaderWriterLockSlim._fUpgradeThreadHoldingRead, System.Threading.ReaderWriterLockSlim._numWriteUpgradeWaiters, System.Threading.ReaderWriterLockSlim._numWriteWaiters, System.Threading.ReaderWriterLockSlim._spinLock, System.Threading.ReaderWriterLockSlim._waiterStates, System.Threading.ReaderWriterLockSlim._waitUpgradeEvent, System.Threading.ReaderWriterLockSlim._writeEvent, System.Threading.ReaderWriterLockSlim.SpinLock.Exit(), System.Threading.ReaderWriterLockSlim.ExitAndWakeUpAppropriateReadWaiters(), System.Threading.ReaderWriterLockSlim.GetNumReaders(), and System.Threading.EventWaitHandle.Set().

Referenced by System.Threading.ReaderWriterLockSlim.ExitAndWakeUpAppropriateWaiters().