Yarış durumları ve kilitlenmeleri açıklaması

Makale çevirileri Makale çevirileri
Makale numarası: 317723 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Visual Basic .NET ya da Visual Basic 2005 iş parçacığı içinde Visual Basic uygulamalarının ilk kez kullanma olanağı sunar. İş parçacığı yarış durumları ve kilitlenmeleri gibi hata ayıklama sorunları ele alır. Bu makalede, bu iki sorunları inceler.

Daha fazla bilgi

Yarış durumları

İki iş parçacığı aynı anda paylaşılan bir değişken erişirken bir yarış durumu oluşur. İlk iş parçacığı değişken okur ve ikinci bir iş parçacığı değişkenin değeri okur. Sonra ilk iş parçacığı ve ikinci bir iş parçacığı kendi değer işlemleri ve bunların hangi iş parçacığı değeri son paylaşılan değişkene yazabilirsiniz görmek için izler. İş parçacığı değeri önceki iş parçacığı yazdığınızı yazıyor çünkü onun değeri Yazar iş parçacığı değeri son korunur.

Ayrıntılar ve örnek

Her iş parçacığının işlemci üzerinde yürütmek için önceden tanımlanmış dilimi tahsis edilir. İş parçacığı için ayrılan süre dolduğunda, iş parçacığının içeriğini işlemciye kadar bir sonraki turda kaydedilir ve bir sonraki iş parçacığının yürütülmesine işlemci başlar.

Nasıl bir tek satır komutu, bir yarış durumu neden olabilir? Nasıl bir yarış durumu oluşur görmek için aşağıdaki örneği inceleyin. İki iş parçacığı vardır ve her ikisi de Toplam adlı paylaşılan bir değişken güncelleştiriliyor (olarak temsil dword ptr ds: [031B49DCh] bütünleştirilmiş kod içinde).

Visual Basic kodu:
   'Thread 1
   Total = Total + val1
				
   'Thread 2
   Total = Total - val2
				
Yukarıdaki Visual Basic kod derlemeden bütünleştirilmiş kodu (satır numaralarıyla):
 'Thread 1
 1.   mov         eax,dword ptr ds:[031B49DCh] 
 2.   add         eax,edi 
 3.   jno         00000033 
 4.   xor         ecx,ecx 
 5.   call        7611097F 
 6.   mov         dword ptr ds:[031B49DCh],eax 
				
 'Thread 2
 1.   mov         eax,dword ptr ds:[031B49DCh] 
 2.   sub         eax,edi 
 3.   jno         00000033 
 4.   xor         ecx,ecx 
 5.   call        76110BE7 
 6.   mov         dword ptr ds:[031B49DCh],eax 
				
Bütünleştirilmiş koda bakarak kaç işlemleri görebilirsiniz işlemci basit hesaplama yürütmek için daha düşük düzeyde gerçekleştiriyor. Bir iş parçacığı kendi Zamanı işlemcinin içinde kendi bütünleştirilmiş kodun bir bölümünü veya tümünü çalıştırmak mümkün olabilir. Şimdi bu koddan nasıl bir yarış durumu oluşur bakın.

Toplam 100, değer1 50'dir ve değer2 15. 1 İş parçacığı yürütmek için bir fırsat alır, ancak yalnızca 1 ile 3 arasındaki adımları tamamlar. Bu iş parçacığı 1 değişken okuma ve ekleme tamamlandı anlamına gelir. 1 İş parçacığı artık yalnızca yeni de?erini 150 yazmak için bekliyor demektir. 1 İş parçacığı durdurulduktan sonra tamamen yürütme iş parçacığı 2 alır. Başka bir deyişle, onu (85) öğrenmek için değişken toplam hesaplanan değeri yazmıştır. Son olarak, 1 iş parçacığı denetimi yeniden gelmesini ve yürütmesi tamamlandığında. De?erini (150) yazar. 1 İş parçacığı sona erdiğinde, bu nedenle, toplam değeri 150 85 yerine sunulmuştur.

Bunun nasıl olabileceğini görmek büyük bir sorun. Bu bankacılık programı varsa, müşteri bulunmamalıdır kendi hesabında para alırlar.

Bu hata rastgele, önce kendi zamanı, yürütme tamamlamak 1 iş parçacığı için olası olduğu için işlemci süresi ve, yürütme iş parçacığı 2 sonra başlayabilir. Bu olaylar meydana geldiği zaman sorun oluşmaz. İş parçacığı yürütmeyi belirleyici olmayan, bu nedenle, zaman veya yürütme sırasını kontrol edemezsiniz. Ayrıca, iş parçacığı çalışma zamanında hata ayıklama modu karşı farklı yürütür unutmayın. Ayrıca, dizideki her iş parçacığı yürütme, hata meydana gelmediğini görebilirsiniz. Bu rasgelelik bu hataları izlemek ve hata ayıklama çok daha zor hale getirir.

Yarış durumları oluşmasını önlemek için yalnızca bir iş parçacığının aynı anda paylaşılan değişkenine erişebilir böylece paylaşılan değişkenler kilitleyebilirsiniz. 2 İş parçacığı iş parçacığı değişkenini serbest bırakmak için 1 beklerken bir değişken 1 iş parçacığı içinde kilitli ve iş parçacığı 2 değişken de gerekirse iş parçacığı 2 yürütme durdurması nedeniyle gelişigüzel, bunu. (Daha fazla bilgi için bu makalenin "Başvurular" bölümünde "SyncLock" başlığına bakın.)

Belirtiler

En yaygın belirtisi, bir yarış durumu öngörülemeyen çoklu iş parçacıkları arasında paylaşılan değişkenlerin değerlerini olur. Bu, iş parçacıkları yürütme sırasını karşılaştırıldığında olur. Bugün bir iş parçacığı WINS ve bugün bir iş parçacığı WINS. Diğer zamanlarda yürütme düzgün çalışır. Her iş parçacığına ayrı olarak yürütülen, ayrıca, değişken değeri doğru olarak davranır.

Kilitlenmeler

İki iş parçacığı her aynı anda farklı değişken kilitlemek ve diğer iş parçacığı zaten kilitli değişken kilitlemek deneyin bir kilitlenme oluşur. Sonuç olarak, her iş parçacığı yürütülmesi durdurulur ve diğer iş değişkenini serbest bırakmak bekler. Çünkü her iş parçacığı, hiçbir şey olmuyor, diğer iş parçacığı istediği değişkenin tutan ve iş parçacıkları kilitli kalır.

Ayrıntılar ve örnek

Aşağıdaki kod, LeftVal ve RightVal olmak üzere iki nesne vardır:
'Thread 1
SyncLock LeftVal
 SyncLock RightVal
  'Perform operations on LeftVal and RightVal that require read and write.
 End SyncLock
End SyncLock
				
'Thread 2
SyncLock RightVal
 SyncLock LeftVal
  'Perform operations on RightVal and LeftVal that require read and write.
 End SyncLock
End SyncLock
				
1 İş parçacığı LeftVal kilitlemek için izin verilen bir kilitlenme oluşur. İşlemcisi iş parçacığı 1 çalışmayı durdurur ve yürütme iş parçacığı 2 başlar. 2 Kilit RightVal ve LeftVal kilitlemek için denemeler iş parçacığı. LeftVal kilitli olduğundan, iş parçacığı 2 durdurur ve LeftVal serbest bırakılması için bekler. İş parçacığı 2 kestiğinden 1 iş parçacığı yürütme devam etmek için izin verilir. İş parçacığı 1 RightVal kilitlemek çalışır, ancak iş parçacığı 2 kilitlediğinden olamaz. Sonuç olarak, iş parçacığı 1 RightVal kullanılabilir duruma gelene kadar beklemek başlar. Her iş parçacığı, diğer iş parçacığı bekleyen değişken kilitlediğinden diğer için iş parçacığı, her iş parçacığı bekler ve onu bulunduran değişken ne iş parçacığı kilidini açma.

Her zaman bir kilitlenme ortaya çıkmaz. İşlemci durmadan önce her iki kilit 1 iş parçacığı yürütür, 1 iş parçacığı işlemleri yerine getirebilmesi ve paylaşılan değişken kilidini açın. Değişken 1 iş parçacığı kilidini açar sonra iş parçacığı 2 beklendiği gibi yürütme ile devam edebilirsiniz.

Bu hata, bu kod parçacıkları yan yana yerleştirilir, ancak pratikte kod ayrı modüller veya alanlar, kodunuzun içinde görünebilir belirgin gibi görünüyor. Bu aynı bu koddan yürütme doğru ve yanlış yürütme meydana gelebileceğinden, bulunması çok zor bir hata.

Belirtiler

Kilitlenme ortak bir belirtisi, programı veya iş parçacığı grubunun yanıt vermiyor ' dir. Bu da bir askıdadenir. Her diğer iş parçacığı kilitli bir değişken bekleniyor en az iki akışlardır. Başka bir değişken ulaşana kadar her iki iş parçacığı değişkeni serbest bırakır çünkü iş parçacıkları, devam etmeyin. Program, bir veya iki tam yürütme için bu iş parçacığı üzerinde beklediği tüm program askıda.

Bir iş parçacığı nedir?

İşlemler, belirtilen bir zamanda tek bir bilgisayarda çalışan farklı uygulamalar birbirinden ayırmak için kullanılır. İşletim sistemi işlemleri yürütmez, ancak iş parçacığı yapın. Bir iş parçacığı bir birimidir. İşletim sistemi iş parçacığının görevlerin yürütülmesi için bir iş parçacığı için işlemci zamanı ayırır. Tek bir işlemin birden çok iş parçacığı yürütme içerebilir. Her iş parçacığı öncelikleri ve işlemci atandığı süre boyunca, yürütme iş parçacığı tamamlanamazsa, iş parçacığının içeriğini kaydetmek için işletim sisteminin kullandığı yapıları kümesi zamanlama kendi özel durum işleyicilerini kullanır. İçerik İş parçacığının işlemci zamanını alır açana kadar tutulur. İçerik İş parçacığı sorunsuz bir şekilde, yürütme devam etmek için gerekli olduğu tüm bilgileri içerir. Bu bilgiler iş parçacığının işlemci kayıtları ve çağrı yığını ana işlemin adres alanı içinde içerir.

Referanslar

Daha fazla bilgi için Visual Studio Yardımı aşağıdaki anahtar sözcük arama:
  • SyncLock. Kilitlenecek nesne sağlar. Başka bir iş parçacığı, aynı nesneyi kilitlemek çalışırsa, ilk iş parçacığının serbest kadar engellenir. SyncLock kötüye kullanılmaya karşı sorunlarına neden olabileceğinden SyncLock dikkatlice kullanın. Örneğin, bu komut yarış durumları engellemek ancak kilitlenmeleri neden.
  • İnterLocked. İş parçacığı açısından güvenli işlemleri temel sayısal değişkenler üzerinde bir dizi verir.
Daha fazla bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
316422 BİLGİ: Visual Basic .NET iş parçacığı için yol haritası
Daha fazla bilgi için aşağıdaki MSDN Web sitesine bakın:
İş parçacıkları ve iş parçacığı oluşturma

Özellikler

Makale numarası: 317723 - Last Review: 29 Ekim 2013 Salı - Gözden geçirme: 3.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
Anahtar Kelimeler: 
kbvs2005swept kbvs2005applies kbinfo kbmt KB317723 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 317723

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com