Freigeben über


ReaderWriterLock.IsWriterLockHeld-Eigenschaft

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

Namespace: System.Threading
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public ReadOnly Property IsWriterLockHeld As Boolean
'Usage
Dim instance As ReaderWriterLock
Dim value As Boolean

value = instance.IsWriterLockHeld
public bool IsWriterLockHeld { get; }
public:
property bool IsWriterLockHeld {
    bool get ();
}
/** @property */
public boolean get_IsWriterLockHeld ()
public function get IsWriterLockHeld () : boolean

Eigenschaftenwert

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

Beispiel

Das folgende Codebeispiel veranschaulicht, dass ReaderWriterLock bei dem Versuch, eine Lesesperre für einen Thread mit Schreibsperre zu erhalten, keine Lesesperre erteilt, sondern stattdessen die Sperrenanzahl für die Schreibsperre inkrementiert.

Imports System
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
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.");
        }
    }
}
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." );
   }
}
import System.*;
import System.Threading.*;
    
class LockHeld
{
    public static void main(String[] args)
    {
        ReaderWriterLock rwLock = new ReaderWriterLock();

        rwLock.AcquireWriterLock(Timeout.Infinite);
        rwLock.AcquireReaderLock(Timeout.Infinite);
        if (rwLock.get_IsReaderLockHeld()) {
            Console.WriteLine("Reader lock held.");
            rwLock.ReleaseReaderLock();
        }
        else {
            if (rwLock.get_IsWriterLockHeld()) {
                Console.WriteLine("Writer lock held.");
                rwLock.ReleaseWriterLock();
            }
            else {
                Console.WriteLine("No locks held.");
            }
        }

        if (rwLock.get_IsReaderLockHeld()) {
            Console.WriteLine("Reader lock held.");
            rwLock.ReleaseReaderLock();
        }
        else {
            if (rwLock.get_IsWriterLockHeld()) {
                Console.WriteLine("Writer lock held.");
                rwLock.ReleaseWriterLock();
            }
            else {
                Console.WriteLine("No locks held.");
            }
        }
    } //main
} //LockHeld

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

ReaderWriterLock-Klasse
ReaderWriterLock-Member
System.Threading-Namespace

Weitere Ressourcen

Verwaltetes Threading
Lese-/Schreibsperren