ReaderWriterLock.AcquireReaderLock 方法

定義

取得讀取器的鎖定。

多載

AcquireReaderLock(Int32)

使用逾時值 Int32 取得讀取器的鎖定。

AcquireReaderLock(TimeSpan)

使用逾時值 TimeSpan 取得讀取器的鎖定。

AcquireReaderLock(Int32)

來源:
ReaderWriterLock.cs
來源:
ReaderWriterLock.cs
來源:
ReaderWriterLock.cs

使用逾時值 Int32 取得讀取器的鎖定。

C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock(int millisecondsTimeout);
C#
public void AcquireReaderLock(int millisecondsTimeout);

參數

millisecondsTimeout
Int32

逾時以毫秒為單位。

屬性

例外狀況

millisecondsTimeout 在授與鎖定要求前過期。

範例

下列程式碼範例示範如何取得和釋放讀取器鎖定,以及如何處理在要求逾時時擲回的例外狀況。

此程式碼是類別所提供較大範例的 ReaderWriterLock 一部分。

C#
// The complete code is located in the ReaderWriterLock class topic.
using System;
using System.Threading;

public class Example
{
   static ReaderWriterLock rwl = new ReaderWriterLock();
   // Define the shared resource protected by the ReaderWriterLock.
   static int resource = 0;
C#
// Request and release a reader lock, and handle time-outs.
static void ReadFromResource(int timeOut)
{
   try {
      rwl.AcquireReaderLock(timeOut);
      try {
         // It is safe for this thread to read from the shared resource.
         Display("reads resource value " + resource);
         Interlocked.Increment(ref reads);
      }
      finally {
         // Ensure that the lock is released.
         rwl.ReleaseReaderLock();
      }
   }
   catch (ApplicationException) {
      // The reader lock request timed out.
      Interlocked.Increment(ref readerTimeouts);
   }
}
C#
}

備註

AcquireReaderLock 如果不同的執行緒具有寫入器鎖定,或至少一個執行緒正在等候寫入器鎖定,則會封鎖 。

備註

如果目前的執行緒已經有寫入器鎖定,則不會取得讀取器鎖定。 相反地,寫入器鎖定上的鎖定計數會遞增。 這可防止執行緒在其自己的寫入器鎖定上封鎖。 結果與呼叫 AcquireWriterLock 完全相同,而且在釋放寫入器鎖定時需要額外的 呼叫 ReleaseWriterLock

AcquireReaderLock 支援遞迴讀取器鎖定要求。 也就是說,執行緒可以多次呼叫 AcquireReaderLock,每次都會遞增鎖定計數。 每次呼叫 時,都必須呼叫 ReleaseReaderLockAcquireReaderLock 一次。 或者,您可以呼叫 ReleaseLock 來立即將鎖定計數減少為零。

遞迴鎖定要求一律會立即授與,而不會在讀取器佇列中放置要求執行緒。 請小心使用遞迴鎖定,以避免長時間封鎖寫入器鎖定要求。

如需有效的逾時值,請參閱 ReaderWriterLock

另請參閱

適用於

.NET 10 和其他版本
產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

AcquireReaderLock(TimeSpan)

來源:
ReaderWriterLock.cs
來源:
ReaderWriterLock.cs
來源:
ReaderWriterLock.cs

使用逾時值 TimeSpan 取得讀取器的鎖定。

C#
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock(TimeSpan timeout);
C#
public void AcquireReaderLock(TimeSpan timeout);

參數

timeout
TimeSpan

TimeSpan,指定逾時期間。

屬性

例外狀況

timeout 在授與鎖定要求前過期。

timeout 可以指定 -1 毫秒以外的負值。

備註

AcquireReaderLock 如果不同的執行緒具有寫入器鎖定,或至少一個執行緒正在等候寫入器鎖定,則會封鎖 。

備註

如果目前的執行緒已經有寫入器鎖定,則不會取得讀取器鎖定。 相反地,寫入器鎖定上的鎖定計數會遞增。 這可防止執行緒在其自己的寫入器鎖定上封鎖。 結果與呼叫 AcquireWriterLock 完全相同,而且在釋放寫入器鎖定時需要額外的 呼叫 ReleaseWriterLock

AcquireReaderLock 支援遞迴讀取器鎖定要求。 也就是說,執行緒可以多次呼叫 AcquireReaderLock,每次都會遞增鎖定計數。 每次呼叫 時,都必須呼叫 ReleaseReaderLockAcquireReaderLock 一次。 或者,您可以呼叫 ReleaseLock 來立即將鎖定計數減少為零。

遞迴鎖定要求一律會立即授與,而不會在讀取器佇列中放置要求執行緒。 請小心使用遞迴鎖定,以避免長時間封鎖寫入器鎖定要求。

如需有效的逾時值,請參閱 ReaderWriterLock

另請參閱

適用於

.NET 10 和其他版本
產品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1