ReaderWriterLock.IsWriterLockHeld 属性

获取一个值,该值指示当前线程是否持有写线程锁。

**命名空间:**System.Threading
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Public ReadOnly Property IsWriterLockHeld As Boolean
用法
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

属性值

如果当前线程持有写线程锁,则为 true;否则为 false

示例

下面的代码示例阐释了当尝试获取具有编写器锁的线程的阅读器锁时,ReaderWriterLock 不授予阅读器锁,而是增加编写器锁的锁数。

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

平台

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 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

ReaderWriterLock 类
ReaderWriterLock 成员
System.Threading 命名空间

其他资源

托管线程处理
读取器/编写器锁