SemaphoreFullException Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Yöntem, sayısı zaten en yüksek olan bir semaforda çağrıldığında Release oluşan özel durum.
public ref class SemaphoreFullException : Exception
public ref class SemaphoreFullException : SystemException
public class SemaphoreFullException : Exception
public class SemaphoreFullException : SystemException
[System.Runtime.InteropServices.ComVisible(false)]
[System.Serializable]
public class SemaphoreFullException : SystemException
type SemaphoreFullException = class
inherit Exception
type SemaphoreFullException = class
inherit SystemException
[<System.Runtime.InteropServices.ComVisible(false)>]
[<System.Serializable>]
type SemaphoreFullException = class
inherit SystemException
Public Class SemaphoreFullException
Inherits Exception
Public Class SemaphoreFullException
Inherits SystemException
- Devralma
- Devralma
- Öznitelikler
Örnekler
Aşağıdaki kod örneği, bir iş parçacığındaki programlama hatasının başka bir iş parçacığında nasıl yol SemaphoreFullException açabileceğini gösterir: İki iş parçacığı semafor girer. İkinci iş parçacığı semaforu iki kez serbest bırakırken, ilk iş parçacığı görevini yürütmeye devam eder. İlk iş parçacığı semaforu bitirip serbest bıraktığında, semafor sayısı zaten dolu olur ve bir özel durum oluşturulur.
#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.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.
'
Açıklamalar
Bir semafor üzerindeki sayı, bir iş parçacığı semafora her girdiğinde azalmış ve bir iş parçacığı semaforu serbest bıraktığında artırılır. Sayı sıfır olduğunda, izleyen istekler diğer iş parçacıkları semaforu serbest bırakana kadar engeller. Tüm iş parçacıkları semaforu serbest bırakıldığında, sayı semafor oluşturulduğunda belirtilen en yüksek değerde olur. Bir programlama hatası bir iş parçacığının bu noktada yöntemini çağırmasına Semaphore.Release neden olursa, bir SemaphoreFullException oluşturulur.
Not
sınıfı Semaphore ve Semaphore.Release yöntemlerine WaitHandle.WaitOne yapılan çağrılarda iş parçacığı kimliğini zorlamaz. çağıran WaitOne aynı iş parçacığının çağrısı Releaseiçin gerekli değildir.
SemaphoreFullException özel durumun oluştuğu kodda bir sorun olduğunu belirtmez. Şu senaryoyu göz önünde bulundurun: İş Parçacığı A ve B iş parçacığı en fazla iki sayının bulunduğu bir semafor girer. B iş parçacığındaki bir programlama hatası, semafordaki sayının dolu olması için iki kez çağırmasına Release neden olur. Sonuç olarak, A iş parçacığı sonunda çağırdığında Releasea SemaphoreFullException oluşturulur.
Sınıfının bir örneğinin ilk özellik değerlerinin SemaphoreFullException listesi için oluşturucuya SemaphoreFullException() bakın.
Oluşturucular
SemaphoreFullException() |
SemaphoreFullException sınıfının yeni bir örneğini varsayılan değerlerle başlatır. |
SemaphoreFullException(SerializationInfo, StreamingContext) |
SemaphoreFullException sınıfının yeni bir örneğini serileştirilmiş verilerle başlatır. |
SemaphoreFullException(String) |
Belirtilen hata iletisiyle sınıfının yeni bir örneğini SemaphoreFullException başlatır. |
SemaphoreFullException(String, Exception) |
Belirtilen bir hata iletisi ve bu özel durumun nedeni olan iç özel duruma başvuru ile sınıfının yeni bir örneğini SemaphoreFullException başlatır. |
Özellikler
Data |
Özel durum hakkında kullanıcı tanımlı ek bilgiler sağlayan bir anahtar/değer çifti koleksiyonu alır. (Devralındığı yer: Exception) |
HelpLink |
Bu özel durumla ilişkili yardım dosyasının bağlantısını alır veya ayarlar. (Devralındığı yer: Exception) |
HResult |
Belirli bir özel duruma atanan kodlanmış sayısal bir değer olan HRESULT değerini alır veya ayarlar. (Devralındığı yer: Exception) |
InnerException |
Geçerli özel duruma Exception neden olan örneği alır. (Devralındığı yer: Exception) |
Message |
Geçerli özel durumu açıklayan bir ileti alır. (Devralındığı yer: Exception) |
Source |
Hataya neden olan uygulamanın veya nesnenin adını alır veya ayarlar. (Devralındığı yer: Exception) |
StackTrace |
Çağrı yığınındaki anlık çerçevelerin dize gösterimini alır. (Devralındığı yer: Exception) |
TargetSite |
Geçerli özel durumu oluşturan yöntemini alır. (Devralındığı yer: Exception) |
Yöntemler
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
GetBaseException() |
Türetilmiş bir sınıfta geçersiz kılındığında, sonraki bir veya daha fazla özel durumun kök nedeni olan değerini döndürür Exception . (Devralındığı yer: Exception) |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Türetilmiş bir sınıfta geçersiz kılındığında, özel durum hakkındaki bilgilerle öğesini ayarlar SerializationInfo . (Devralındığı yer: Exception) |
GetType() |
Geçerli örneğin çalışma zamanı türünü alır. (Devralındığı yer: Exception) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
ToString() |
Geçerli özel durumun dize gösterimini oluşturur ve döndürür. (Devralındığı yer: Exception) |
Ekinlikler
SerializeObjectState |
Geçersiz.
Bir özel durum, özel durum hakkında serileştirilmiş veriler içeren bir özel durum nesnesi oluşturmak üzere seri hale getirildiğinde gerçekleşir. (Devralındığı yer: Exception) |