現在のスレッドがリーダー ロックを保持しているかどうかを示す値を取得します。
Public ReadOnly Property IsReaderLockHeld As Boolean
[C#]
public bool IsReaderLockHeld {get;}
[C++]
public: __property bool get_IsReaderLockHeld();
[JScript]
public function get IsReaderLockHeld() : Boolean;
プロパティ値
現在のスレッドがリーダー ロックを保持している場合は true 。それ以外の場合は false 。
使用例
[Visual Basic, C#, C++] IsReaderLockHeld を使用してデッドロックを避ける方法の例を次に示します。
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