次の方法で共有


ReaderWriterLock.IsWriterLockHeld プロパティ

現在のスレッドがライタ ロックを保持しているかどうかを示す値を取得します。

Public ReadOnly Property IsWriterLockHeld As Boolean
[C#]
public bool IsWriterLockHeld {get;}
[C++]
public: __property bool get_IsWriterLockHeld();
[JScript]
public function get IsWriterLockHeld() : Boolean;

プロパティ値

現在のスレッドがライタ ロックを保持している場合は true 。それ以外の場合は false

使用例

[Visual Basic, C#, C++] ReaderWriterLock では、ライタ ロックを保持するスレッドでリーダー ロックを取得しようとすると、リーダー ロックは与えられず、代わりにライタ ロックのロック カウントがインクリメントされるということを示す例を次に示します。

 
Imports System
Imports System.Threading

Public Class LockHeld

    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

[C#] 
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.");
        }
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;

void main()
{
    ReaderWriterLock* rwLock = new ReaderWriterLock();

    rwLock->AcquireWriterLock(Timeout::Infinite);
    rwLock->AcquireReaderLock(Timeout::Infinite);

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

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

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

ReaderWriterLock クラス | ReaderWriterLock メンバ | System.Threading 名前空間 | スレッド処理 | ReaderWriterLock