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

◆ ReleaseWriterLock()

void System.Threading.ReaderWriterLock.ReleaseWriterLock ( )
inline

Definition at line 499 of file ReaderWriterLock.cs.

500 {
502 {
503 throw GetNotOwnerException();
504 }
505 _writerLevel--;
506 if (_writerLevel > 0)
507 {
508 return;
509 }
510 _writerID = -1;
511 ManualResetEventSlim manualResetEventSlim = null;
512 AutoResetEvent autoResetEvent = null;
513 int num = _state;
514 bool flag;
515 int num2;
516 do
517 {
518 flag = false;
519 num2 = num;
520 int num3 = -4096;
521 if (((uint)num2 & 0x7FE000u) != 0)
522 {
524 if (manualResetEventSlim == null)
525 {
526 Thread.Sleep(100);
527 num = _state;
528 num2 = 0;
529 continue;
530 }
531 num3 += 1024;
532 }
533 else if (((uint)num2 & 0xFF800000u) != 0)
534 {
536 if (autoResetEvent == null)
537 {
538 Thread.Sleep(100);
539 num = _state;
540 num2 = 0;
541 continue;
542 }
543 num3 += 2048;
544 }
545 else if (num2 == 4096 && (_readerEvent != null || _writerEvent != null))
546 {
547 flag = true;
548 num3 += 3072;
549 }
550 num = Interlocked.CompareExchange(ref _state, num2 + num3, num2);
551 }
552 while (num != num2);
553 if (((uint)num2 & 0x7FE000u) != 0)
554 {
556 }
557 else if (((uint)num2 & 0xFF800000u) != 0)
558 {
559 autoResetEvent.Set();
560 }
561 else if (flag)
562 {
564 }
565 }
static ApplicationException GetNotOwnerException()
ManualResetEventSlim TryGetOrCreateReaderEvent()

References System.Threading.ReaderWriterLock._readerEvent, System.Threading.ReaderWriterLock._state, System.Threading.ReaderWriterLock._writerEvent, System.Threading.ReaderWriterLock._writerID, System.Threading.ReaderWriterLock._writerLevel, System.Threading.Interlocked.CompareExchange(), System.Runtime.Serialization.Dictionary, System.Threading.ReaderWriterLock.GetCurrentThreadID(), System.Threading.ReaderWriterLock.GetNotOwnerException(), System.Threading.ReaderWriterLock.ReleaseEvents(), System.Threading.Thread.Sleep(), System.Threading.ReaderWriterLock.TryGetOrCreateReaderEvent(), and System.Threading.ReaderWriterLock.TryGetOrCreateWriterEvent().

Referenced by System.Threading.ReaderWriterLock.AcquireWriterLock(), System.Threading.ReaderWriterLock.DowngradeFromWriterLock(), System.Threading.ReaderWriterLock.ReleaseLock(), and System.Threading.ReaderWriterLock.ReleaseReaderLock().