SpinLock.Enter(Boolean) メソッド


メソッド呼び出し内で例外が発生した場合でも、lockTaken を確実に確認して、ロックが取得されたかどうかを判断できるような信頼性の高い方法で、ロックを取得します。Acquires the lock in a reliable manner, such that even if an exception occurs within the method call, lockTaken can be examined reliably to determine whether the lock was acquired.

 void Enter(bool % lockTaken);
public void Enter (ref bool lockTaken);
member this.Enter : bool -> unit
Public Sub Enter (ByRef lockTaken As Boolean)



ロックが取得された場合は true。それ以外の場合は false。True if the lock is acquired; otherwise, false. このメソッドを呼び出す前に、lockTaken を false に初期化する必要があります。lockTaken must be initialized to false prior to calling this method.


lockTaken 引数は、Enter を呼び出す前に false に初期化する必要があります。The lockTaken argument must be initialized to false prior to calling Enter.

スレッドの所有権の追跡が有効で、現在のスレッドは既にこのロックを取得しています。Thread ownership tracking is enabled, and the current thread has already acquired this lock.


SpinLockは再入不可能なロックです。つまり、スレッドがロックを保持している場合、ロックに再び入ることはできません。SpinLock is a non-reentrant lock, meaning that if a thread holds the lock, it is not allowed to enter the lock again. スレッドの所有権の追跡が有効になっている場合 ( IsThreadOwnerTrackingEnabled有効になっているかどうかにかかわらず)、スレッドが既に保持しているロックを再入力しようとすると、例外がスローされます。If thread ownership tracking is enabled (whether it's enabled is available through IsThreadOwnerTrackingEnabled), an exception will be thrown when a thread tries to re-enter a lock it already holds. ただし、スレッドの所有権の追跡が無効になっている場合、既に保持されているロックを入力しようとすると、デッドロックが発生します。However, if thread ownership tracking is disabled, attempting to enter a lock already held will result in deadlock.

を最初にExit呼び出さEnterずにを呼び出すと、 SpinLockの内部状態が破損する可能性があります。If you call Exit without having first called Enter the internal state of the SpinLock can become corrupted.