Freigeben über


ReaderWriterLock.IsWriterLockHeld Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob der aktuelle Thread die Schreibsperre enthält.

public:
 property bool IsWriterLockHeld { bool get(); };
public bool IsWriterLockHeld { get; }
member this.IsWriterLockHeld : bool
Public ReadOnly Property IsWriterLockHeld As Boolean

Eigenschaftswert

Boolean

true, wenn der aktuelle Thread die Schreibsperre enthält, andernfalls false.

Beispiele

Im folgenden Codebeispiel wird gezeigt, dass beim Versuch, eine Lesesperre auf einem Thread zu erwerben, der über eine Writer-Sperre verfügt, ReaderWriterLock nicht die Lesesperre gewährt, sondern stattdessen die Sperranzahl auf der Writer-Sperre erhöht.

using namespace System;
using namespace System::Threading;
int main()
{
   ReaderWriterLock^ rwLock = gcnew ReaderWriterLock;
   rwLock->AcquireWriterLock( Timeout::Infinite );
   rwLock->AcquireReaderLock( Timeout::Infinite );
   if ( rwLock->IsReaderLockHeld )
   {
      Console::WriteLine( "Reader lock held." );
      rwLock->ReleaseReaderLock();
   }
   else
   if ( rwLock->IsWriterLockHeld )
   {
      Console::WriteLine( "Writer lock held." );
      rwLock->ReleaseWriterLock();
   }
   else
   {
      Console::WriteLine( "No locks held." );
   }


   if ( rwLock->IsReaderLockHeld )
   {
      Console::WriteLine( "Reader lock held." );
      rwLock->ReleaseReaderLock();
   }
   else
   if ( rwLock->IsWriterLockHeld )
   {
      Console::WriteLine( "Writer lock held." );
      rwLock->ReleaseWriterLock();
   }
   else
   {
      Console::WriteLine( "No locks held." );
   }
}
using System;
using System.Threading;

class LockHeld
{
    static void Main()
    {
        ReaderWriterLock rwLock = new ReaderWriterLock();

        rwLock.AcquireWriterLock(Timeout.Infinite);
        rwLock.AcquireReaderLock(Timeout.Infinite);

        if(rwLock.IsReaderLockHeld)
        {
            Console.WriteLine("Reader lock held.");
            rwLock.ReleaseReaderLock();
        }
        else if(rwLock.IsWriterLockHeld)
        {
            Console.WriteLine("Writer lock held.");
            rwLock.ReleaseWriterLock();
        }
        else
        {
            Console.WriteLine("No locks held.");
        }

        if(rwLock.IsReaderLockHeld)
        {
            Console.WriteLine("Reader lock held.");
            rwLock.ReleaseReaderLock();
        }
        else if(rwLock.IsWriterLockHeld)
        {
            Console.WriteLine("Writer lock held.");
            rwLock.ReleaseWriterLock();
        }
        else
        {
            Console.WriteLine("No locks held.");
        }
    }
}
Imports System.Threading

Public Class LockHeld

    <MTAThread> _
    Shared Sub Main()
    
        Dim rwLock As New ReaderWriterLock()

        rwLock.AcquireWriterLock(Timeout.Infinite)
        rwLock.AcquireReaderLock(Timeout.Infinite)

        If rwLock.IsReaderLockHeld Then
            Console.WriteLine("Reader lock held.")
            rwLock.ReleaseReaderLock()
        Else If rwLock.IsWriterLockHeld Then
            Console.WriteLine("Writer lock held.")
            rwLock.ReleaseWriterLock()
        Else
            Console.WriteLine("No locks held.")
        End If

        If rwLock.IsReaderLockHeld Then
            Console.WriteLine("Reader lock held.")
            rwLock.ReleaseReaderLock()
        Else If rwLock.IsWriterLockHeld Then
            Console.WriteLine("Writer lock held.")
            rwLock.ReleaseWriterLock()
        Else
            Console.WriteLine("No locks held.")
        End If
    
    End Sub
End Class

Gilt für

Siehe auch