Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tüm iş parçacıklarının Thread yönetimi, ortak dil çalışma zamanı tarafından oluşturulan iş parçacıkları ve kodu yürütmek üzere yönetilen ortama giren çalışma zamanının dışında oluşturulanlar da dahil olmak üzere sınıfı üzerinden gerçekleştirilir. Çalışma zamanı, yönetilen yürütme ortamında kod yürütmüş olan tüm iş parçacıklarını kendi işleminde izler. Diğer iş parçacıklarını takip etmez. Thread'ler, yönetilen çalışma ortamına COM birlikte çalışması aracılığıyla girebilir (çalışma zamanı yönetilen nesneleri yönetilmeyen dünyada COM nesneleri olarak kullanıma sağladığından), COM DllGetClassObject işlevi ve platform çağrısı üzerinden.
Yönetilmeyen bir iş parçacığı, örneğin bir COM çağırma sarmalayıcısı aracılığıyla çalışma zamanına girdiğinde, sistem bu iş parçacığının iş parçacığı yerel deposunu denetleyerek yönetilen bir Thread nesnesi arar. Bir tane bulunursa, çalışma süresi bu iş parçacığını zaten tanır. Ancak bir nesne bulamazsa, çalışma zamanı yeni bir Thread nesne oluşturur ve bunu iş parçacığına özgü depoya yerleştirir.
Yönetilen iş parçacığında, Thread.GetHashCode kararlı yönetilen iş parçacığı kimliğidir. İş parçacığınızın ömrü boyunca, bu değeri aldığınız uygulama etki alanından bağımsız olarak başka bir iş parçacığının değeriyle çarpışmaz.
Win32 iş parçacığından yönetilen iş parçacığına eşleme
Aşağıdaki tabloda Win32 iş parçacığı öğeleri yaklaşık çalışma zamanı eşdeğerleriyle eşlenmiştir. Bu eşlemenin aynı işlevselliği temsil etmediğini unutmayın. Örneğin TerminateThread, finally yan tümcelerini çalıştırmaz, kaynakları serbest bırakmaz ve bu durum engellenemez. Ancak, Thread.Abort tüm geri dönüş kodunuzu yürütür, tüm kaynakları kurtarır ve ResetAbort kullanılarak reddedilebilir. İşlevsellik hakkında varsayımlarda bulunmadan önce belgeleri yakından okuduğunuzdan emin olun.
| Win32'de | Ortak dil çalışma zamanı ortamında |
|---|---|
| CreateThread | Thread ve ThreadStart Kombinasyonu |
| TerminateThread | Thread.Abort |
| SuspendThread | Thread.Suspend |
| ResumeThread | Thread.Resume |
| Uyumak | Thread.Sleep |
| İş parçacığı tanıtıcısında WaitForSingleObject | Thread.Join |
| ExitThread | Eşdeğeri yok |
| GetCurrentThread | Thread.CurrentThread |
| SetThreadPriority | Thread.Priority |
| Eşdeğeri yok | Thread.Name |
| Eşdeğeri yok | Thread.IsBackground |
| CoInitializeEx'e yakın (OLE32.DLL) | Thread.ApartmentState |
Yönetilen iş parçacıkları ve COM ortamları
Yönetilen iş parçacığı, tek iş parçacıklı veya çok iş parçacıklı bir daire barındıracağını belirtmek için işaretlenebilir. (COM iş parçacığı mimarisi hakkında daha fazla bilgi için bkz: İşlemler, İş Parçacıkları ve Daireler.) GetApartmentState sınıfının SetApartmentState, TrySetApartmentState ve Thread yöntemleri, bir iş parçacığının daire durumunu döndürür ve atar. Ayarlanmamışsa GetApartmentStateApartmentState.Unknown döndürür.
Özellik yalnızca iş parçacığı ThreadState.Unstarted durumundayken ayarlanabilir ve bir iş parçacığı için yalnızca bir kez ayarlanabilir.
İş parçacığı başlatılmadan önce daire durumu ayarlanmamışsa, iş parçacığı çok iş parçacıklı bir daire (MTA) olarak başlatılır. Sonlandırıcı iş parçacığı ve ThreadPool tarafından denetlenen tüm iş parçacıkları MTA'dır.
Önemli
Uygulama başlangıç kodu için, apartman durumunu denetlemenin tek yolu MTAThreadAttribute veya STAThreadAttribute ifadesini giriş noktası prosedürüne uygulamaktır.
COM'a sunulan yönetilen nesneler, serbest iş parçacıklı ara birimi toplamış gibi davranır. Başka bir deyişle, herhangi bir COM dairesinden serbest iş parçacıklı bir şekilde çağrılabilirler. Bu serbest iş parçacıklı davranışını sergilemeyen tek yönetilen nesneler, ServicedComponent veya StandardOleMarshalObject'den türetilen nesnelerdir.
Yönetilen dünyada, bağlamları ve bağlama bağlı yönetilen örnekleri kullanmadıkça SynchronizationAttribute için destek yoktur. Enterprise Services kullanıyorsanız nesneniz ServicedComponent öğesinden türemelidir (bu, ContextBoundObject öğesinden türetilir).
Yönetilen kod COM nesnelerine çağrı yaparken her zaman COM kurallarına uyar. Başka bir deyişle, OLE32 tarafından belirlenen COM apartman proxy'leri ve COM+ 1.0 bağlam sarmalayıcıları aracılığıyla çağrılar.
Engelleyici sorunlar
İş parçacığı, işletim sisteminde yönetilmeyen kodda onu engelleyen bir çağrı yaparsa, çalışma zamanı Thread.Interrupt veya Thread.Abort için bunun kontrolünü almaz. durumunda Thread.Abort, çalışma zamanı iş parçacığını Abort olarak işaretler ve yönetilen kodu yeniden girdiğinde bunun denetimini alır. Yönetilmeyen engelleme yerine yönetilen engellemeyi kullanmanız tercih edilir. WaitHandle.WaitOne, WaitHandle.WaitAny, WaitHandle.WaitAll, Monitor.Enter, Monitor.TryEnter, Thread.Join, GC.WaitForPendingFinalizers ve benzeri tümü Thread.Interrupt ve Thread.Abort'ye yanıt verir. Ayrıca, iş parçacığınız tek iş parçacıklı bir dairedeyse, tüm bu yönetilen engelleme işlemleri, iş parçacığınız engellenirken dairenize iletileri doğru bir şekilde pompalar.
İplikler ve lifler
.NET iş parçacığı modeli fiberleri desteklemez. Yönetilmeyen, fiberlerle uygulanmış herhangi bir fonksiyona çağrıda bulunmamalısınız. Bu tür çağrılar .NET çalışma zamanının kilitlenmesine neden olabilir.