現在のスレッドがライタ ロックを保持しているかどうかを示す値を取得します。
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