ReaderWriterLock.AcquireReaderLock Metode

Definisi

Memperoleh kunci pembaca.

Overload

Nama Deskripsi
AcquireReaderLock(Int32)

Memperoleh kunci pembaca, menggunakan Int32 nilai untuk waktu habis.

AcquireReaderLock(TimeSpan)

Memperoleh kunci pembaca, menggunakan TimeSpan nilai untuk waktu habis.

AcquireReaderLock(Int32)

Sumber:
ReaderWriterLock.cs
Sumber:
ReaderWriterLock.cs
Sumber:
ReaderWriterLock.cs
Sumber:
ReaderWriterLock.cs
Sumber:
ReaderWriterLock.cs

Memperoleh kunci pembaca, menggunakan Int32 nilai untuk waktu habis.

public:
 void AcquireReaderLock(int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock(int millisecondsTimeout);
public void AcquireReaderLock(int millisecondsTimeout);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.AcquireReaderLock : int -> unit
member this.AcquireReaderLock : int -> unit
Public Sub AcquireReaderLock (millisecondsTimeout As Integer)

Parameter

millisecondsTimeout
Int32

Waktu habis dalam milidetik.

Atribut

Pengecualian

millisecondsTimeout kedaluwarsa sebelum permintaan kunci diberikan.

Contoh

Contoh kode berikut menunjukkan cara memperoleh dan merilis kunci pembaca, dan cara menangani pengecualian yang dilemparkan saat permintaan habis.

Kode ini adalah bagian dari contoh yang lebih besar yang disediakan untuk ReaderWriterLock kelas .

// 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;
' The complete code is located in the ReaderWriterLock class topic.
Imports System.Threading

Public Module Example
   Private rwl As New ReaderWriterLock()
   ' Define the shared resource protected by the ReaderWriterLock.
   Private resource As Integer = 0
// 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);
   }
}
' Request and release a reader lock, and handle time-outs.
Sub ReadFromResource(timeOut As Integer)
   Try
      rwl.AcquireReaderLock(timeOut)
      Try
         ' It's safe for this thread to read from the shared resource.
         Display("reads resource value " & resource)
         Interlocked.Increment(reads)
      Finally
         ' Ensure that the lock is released.
         rwl.ReleaseReaderLock()
      End Try
   Catch ex As ApplicationException
      ' The reader lock request timed out.
      Interlocked.Increment(readerTimeouts)
   End Try
End Sub
}
End Module

Keterangan

AcquireReaderLock memblokir jika utas yang berbeda memiliki kunci penulis, atau jika setidaknya satu utas menunggu kunci penulis.

Note

Jika utas saat ini sudah memiliki kunci penulis, tidak ada kunci pembaca yang diperoleh. Sebaliknya, jumlah kunci pada kunci penulis bertahap. Ini mencegah utas memblokir kunci penulisnya sendiri. Hasilnya sama persis dengan panggilan AcquireWriterLock, dan panggilan tambahan ke ReleaseWriterLock diperlukan saat merilis kunci penulis.

AcquireReaderLock mendukung permintaan kunci pembaca rekursif. Artinya, utas dapat memanggil AcquireReaderLock beberapa kali, yang menaikkan jumlah kunci setiap kali. Anda harus memanggil ReleaseReaderLock sekali untuk setiap kali Anda memanggil AcquireReaderLock. Atau, Anda dapat memanggil ReleaseLock untuk mengurangi jumlah kunci menjadi nol segera.

Permintaan penguncian rekursif selalu diberikan segera, tanpa menempatkan utas yang meminta dalam antrean pembaca. Gunakan kunci rekursif dengan hati-hati, untuk menghindari pemblokiran permintaan writer-lock untuk jangka waktu yang lama.

Untuk nilai batas waktu yang valid, lihat ReaderWriterLock.

Lihat juga

Berlaku untuk

AcquireReaderLock(TimeSpan)

Sumber:
ReaderWriterLock.cs
Sumber:
ReaderWriterLock.cs
Sumber:
ReaderWriterLock.cs
Sumber:
ReaderWriterLock.cs
Sumber:
ReaderWriterLock.cs

Memperoleh kunci pembaca, menggunakan TimeSpan nilai untuk waktu habis.

public:
 void AcquireReaderLock(TimeSpan timeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public void AcquireReaderLock(TimeSpan timeout);
public void AcquireReaderLock(TimeSpan timeout);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
member this.AcquireReaderLock : TimeSpan -> unit
member this.AcquireReaderLock : TimeSpan -> unit
Public Sub AcquireReaderLock (timeout As TimeSpan)

Parameter

timeout
TimeSpan

Menentukan TimeSpan periode waktu habis.

Atribut

Pengecualian

timeout kedaluwarsa sebelum permintaan kunci diberikan.

timeout menentukan nilai negatif selain -1 milidetik.

Keterangan

AcquireReaderLock memblokir jika utas yang berbeda memiliki kunci penulis, atau jika setidaknya satu utas menunggu kunci penulis.

Note

Jika utas saat ini sudah memiliki kunci penulis, tidak ada kunci pembaca yang diperoleh. Sebaliknya, jumlah kunci pada kunci penulis bertahap. Ini mencegah utas memblokir kunci penulisnya sendiri. Hasilnya sama persis dengan panggilan AcquireWriterLock, dan panggilan tambahan ke ReleaseWriterLock diperlukan saat merilis kunci penulis.

AcquireReaderLock mendukung permintaan kunci pembaca rekursif. Artinya, utas dapat memanggil AcquireReaderLock beberapa kali, yang menaikkan jumlah kunci setiap kali. Anda harus memanggil ReleaseReaderLock sekali untuk setiap kali Anda memanggil AcquireReaderLock. Atau, Anda dapat memanggil ReleaseLock untuk mengurangi jumlah kunci menjadi nol segera.

Permintaan penguncian rekursif selalu diberikan segera, tanpa menempatkan utas yang meminta dalam antrean pembaca. Gunakan kunci rekursif dengan hati-hati, untuk menghindari pemblokiran permintaan writer-lock untuk jangka waktu yang lama.

Untuk nilai batas waktu yang valid, lihat ReaderWriterLock.

Lihat juga

Berlaku untuk