SemaphoreFullException SemaphoreFullException SemaphoreFullException SemaphoreFullException Class

定義

カウントが既に最大値であるセマフォに対して Release メソッドが呼び出された場合にスローされる例外。The exception that is thrown when the Release method is called on a semaphore whose count is already at the maximum.

public ref class SemaphoreFullException : SystemException
[System.Runtime.InteropServices.ComVisible(false)]
[System.Serializable]
public class SemaphoreFullException : SystemException
type SemaphoreFullException = class
    inherit SystemException
Public Class SemaphoreFullException
Inherits SystemException
継承
SemaphoreFullExceptionSemaphoreFullExceptionSemaphoreFullExceptionSemaphoreFullException
属性

方法 1 つのスレッドでのプログラミング エラーが、発生する可能性。 次のコード例を示しています、SemaphoreFullException別のスレッドで。2 つのスレッドがセマフォを入力します。The following code example shows how a programming error in one thread can lead to a SemaphoreFullException in another thread: Two threads enter a semaphore. 2 番目のスレッドは、最初のスレッドには、タスクがまだ実行中に 2 回、セマフォを解放します。The second thread releases the semaphore twice, while the first thread is still executing its task. 最初のスレッドでは、終了するし、セマフォを解放、セマフォのカウントは既にいっぱいと例外がスローされます。When the first thread finishes and releases the semaphore, the semaphore count is already full and an exception is thrown.

#using <System.dll>
using namespace System;
using namespace System::Threading;

public ref class Example
{
private:
   // A semaphore that can satisfy at most two concurrent
   // requests.
   //
   static Semaphore^ _pool = gcnew Semaphore( 2,2 );

public:
   static void main()
   {
      // Create and start two threads, A and B.
      //
      Thread^ tA = gcnew Thread( gcnew ThreadStart( ThreadA ) );
      tA->Start();

      Thread^ tB = gcnew Thread( gcnew ThreadStart( ThreadB ) );
      tB->Start();
   }

private:
   static void ThreadA()
   {
      // Thread A enters the semaphore and simulates a task
      // that lasts a second.
      //
      _pool->WaitOne();
      Console::WriteLine( L"Thread A entered the semaphore." );

      Thread::Sleep( 1000 );

      try
      {
         _pool->Release();
         Console::WriteLine( L"Thread A released the semaphore." );
      }
      catch ( Exception^ ex ) 
      {
         Console::WriteLine( L"Thread A: {0}", ex->Message );
      }
   }

   static void ThreadB()
   {
      // Thread B simulates a task that lasts half a second,
      // then enters the semaphore.
      //
      Thread::Sleep( 500 );

      _pool->WaitOne();
      Console::WriteLine( L"Thread B entered the semaphore." );
      
      // Due to a programming error, Thread B releases the
      // semaphore twice. To fix the program, delete one line.
      _pool->Release();
      _pool->Release();
      Console::WriteLine( L"Thread B exits successfully." );
   }
};
/* This code example produces the following output:

Thread A entered the semaphore.
Thread B entered the semaphore.
Thread B exits successfully.
Thread A: Adding the given count to the semaphore would cause it to exceed its maximum count.
 */
using System;
using System.Threading;

public class Example
{
    // A semaphore that can satisfy at most two concurrent
    // requests.
    //
    private static Semaphore _pool = new Semaphore(2, 2);

    public static void Main()
    {
        // Create and start two threads, A and B. 
        //
        Thread tA = new Thread(new ThreadStart(ThreadA));
        tA.Start();

        Thread tB = new Thread(new ThreadStart(ThreadB));
        tB.Start();
    }

    private static void ThreadA()
    {
        // Thread A enters the semaphore and simulates a task
        // that lasts a second.
        //
        _pool.WaitOne();
        Console.WriteLine("Thread A entered the semaphore.");

        Thread.Sleep(1000);

        try
        {
            _pool.Release();
            Console.WriteLine("Thread A released the semaphore.");
        }
        catch(Exception ex)
        {
            Console.WriteLine("Thread A: {0}", ex.Message);
        }
    }

    private static void ThreadB()
    {
        // Thread B simulates a task that lasts half a second,
        // then enters the semaphore.
        //
        Thread.Sleep(500);

        _pool.WaitOne();
        Console.WriteLine("Thread B entered the semaphore.");
        
        // Due to a programming error, Thread B releases the
        // semaphore twice. To fix the program, delete one line.
        _pool.Release();
        _pool.Release();
        Console.WriteLine("Thread B exits successfully.");
    }
}
/* This code example produces the following output:

Thread A entered the semaphore.
Thread B entered the semaphore.
Thread B exits successfully.
Thread A: Adding the given count to the semaphore would cause it to exceed its maximum count.
 */
Imports System
Imports System.Threading

Public Class Example

    ' A semaphore that can satisfy at most two concurrent
    ' requests.
    '
    Private Shared _pool As New Semaphore(2, 2)

    <MTAThread> _
    Public Shared Sub Main()
        ' Create and start two threads, A and B. 
        '
        Dim tA As New Thread(AddressOf ThreadA)
        tA.Start()

        Dim tB As New Thread(AddressOf ThreadB)
        tB.Start()

    End Sub

    Private Shared Sub ThreadA()
        ' Thread A enters the semaphore and simulates a task
        ' that lasts a second.
        '
        _pool.WaitOne()
        Console.WriteLine("Thread A entered the semaphore.")

        Thread.Sleep(1000)

        Try
            _pool.Release()
            Console.WriteLine("Thread A released the semaphore.")
        Catch ex As Exception
            Console.WriteLine("Thread A: {0}", ex.Message)
        End Try
    End Sub

    Private Shared Sub ThreadB()
        ' Thread B simulates a task that lasts half a second,
        ' then enters the semaphore.
        '
        Thread.Sleep(500)

        _pool.WaitOne()
        Console.WriteLine("Thread B entered the semaphore.")
        
        ' Due to a programming error, Thread B releases the
        ' semaphore twice. To fix the program, delete one line.
        _pool.Release()
        _pool.Release()
        Console.WriteLine("Thread B exits successfully.")
    End Sub
End Class
' This code example produces the following output:
'
' Thread A entered the semaphore.
' Thread B entered the semaphore.
' Thread B exits successfully.
' Thread A: Adding the given count to the semaphore would cause it to exceed its maximum count.
'

注釈

セマフォのカウントは、スレッドがセマフォに入るし、スレッドがセマフォを解放するときにインクリメントされますたびに減少します。The count on a semaphore is decremented each time a thread enters the semaphore, and incremented when a thread releases the semaphore. カウントが 0 の場合、後続の要求は他のスレッドがセマフォを解放するまでブロックします。When the count is zero, subsequent requests block until other threads release the semaphore. すべてのスレッドがセマフォを解放、ときにカウントが最大値で指定されて、セマフォが作成されたとき。When all threads have released the semaphore, the count is at the maximum value specified when the semaphore was created. 呼び出すスレッドをプログラミング エラーが発生した場合、Semaphore.Releaseメソッドをこの時点で、SemaphoreFullExceptionがスローされます。If a programming error causes a thread to call the Semaphore.Release method at this point, a SemaphoreFullException is thrown.

注意

Semaphoreクラスへの呼び出しでスレッド id は強制されません、WaitHandle.WaitOneSemaphore.Releaseメソッド。The Semaphore class does not enforce thread identity on calls to the WaitHandle.WaitOne and Semaphore.Release methods. 呼び出した同じスレッドの必要はありませんWaitOneを呼び出すReleaseします。It is not necessary for the same thread that called WaitOne to call Release.

SemaphoreFullException 例外が発生したコードの問題を必ずしも示していませんが。SemaphoreFullException does not necessarily indicate a problem with the code where the exception occurred. 次のシナリオについて検討してください。スレッド A と B のスレッドは、セマフォを持つ 2 つの最大数を入力します。Consider the following scenario: Thread A and thread B enter a semaphore that has a maximum count of two. スレッド B でプログラミング エラーが原因でそれを呼び出すRelease2 回、セマフォのカウントがいっぱいようにします。A programming error in thread B causes it to call Release twice, so that the count on the semaphore is full. その結果、スレッド A と最終的に呼び出してReleaseSemaphoreFullExceptionがスローされます。As a result, when thread A eventually calls Release, a SemaphoreFullException is thrown.

SemaphoreFullException クラスのインスタンスの初期プロパティ値一覧については、SemaphoreFullException() コンストラクターに関するトピックを参照してください。For a list of initial property values for an instance of the SemaphoreFullException class, see the SemaphoreFullException() constructor.

コンストラクター

SemaphoreFullException() SemaphoreFullException() SemaphoreFullException() SemaphoreFullException()

SemaphoreFullException クラスの新しいインスタンスを既定値で初期化します。Initializes a new instance of the SemaphoreFullException class with default values.

SemaphoreFullException(SerializationInfo, StreamingContext) SemaphoreFullException(SerializationInfo, StreamingContext) SemaphoreFullException(SerializationInfo, StreamingContext) SemaphoreFullException(SerializationInfo, StreamingContext)

シリアル化したデータを使用して、SemaphoreFullException クラスの新しいインスタンスを初期化します。Initializes a new instance of the SemaphoreFullException class with serialized data.

SemaphoreFullException(String) SemaphoreFullException(String) SemaphoreFullException(String) SemaphoreFullException(String)

指定したエラー メッセージを使用して、SemaphoreFullException クラスの新しいインスタンスを初期化します。Initializes a new instance of the SemaphoreFullException class with a specified error message.

SemaphoreFullException(String, Exception) SemaphoreFullException(String, Exception) SemaphoreFullException(String, Exception) SemaphoreFullException(String, Exception)

指定したエラー メッセージおよびこの例外の原因となった内部例外への参照を使用して、SemaphoreFullException クラスの新しいインスタンスを初期化します。Initializes a new instance of the SemaphoreFullException class with a specified error message and a reference to the inner exception that is the cause of this exception.

プロパティ

Data Data Data Data

例外に関する追加のユーザー定義情報を提供する、キー/値ペアのコレクションを取得します。Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
HelpLink HelpLink HelpLink HelpLink

この例外に関連付けられているヘルプ ファイルへのリンクを取得または設定します。Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult HResult HResult HResult

特定の例外に割り当てられているコード化数値である HRESULT を取得または設定します。Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException InnerException InnerException InnerException

現在の例外の原因となる Exception インスタンスを取得します。Gets the Exception instance that caused the current exception.

(Inherited from Exception)
Message Message Message Message

現在の例外を説明するメッセージを取得します。Gets a message that describes the current exception.

(Inherited from Exception)
Source Source Source Source

エラーの原因となるアプリケーションまたはオブジェクトの名前を取得または設定します。Gets or sets the name of the application or the object that causes the error.

(Inherited from Exception)
StackTrace StackTrace StackTrace StackTrace

呼び出し履歴で直前のフレームの文字列形式を取得します。Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
TargetSite TargetSite TargetSite TargetSite

現在の例外がスローされたメソッドを取得します。Gets the method that throws the current exception.

(Inherited from Exception)

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException() GetBaseException() GetBaseException() GetBaseException()

派生クラスでオーバーライドされた場合、それ以後に発生する 1 つ以上の例外の主要な原因である Exception を返します。When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

派生クラスでオーバーライドされた場合は、その例外に関する情報を使用して SerializationInfo を設定します。When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Inherited from Exception)
GetType() GetType() GetType() GetType()

現在のインスタンスのランタイム型を取得します。Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在の例外の文字列形式を作成して返します。Creates and returns a string representation of the current exception.

(Inherited from Exception)

イベント

SerializeObjectState SerializeObjectState SerializeObjectState SerializeObjectState

例外がシリアル化され、例外に関するシリアル化されたデータを含む例外状態オブジェクトが作成されたときに発生します。Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

適用対象

こちらもご覧ください