Makale numarası: 317723 - Son Gözden Geçirme: 06 Aralık 2006 Çarşamba - Gözden geçirme: 2.3 Yarış durumları ve kilitlenmeleri açıklaması
Bu SayfadaÖzetVisual Basic .NET veya Visual Basic 2005 iş parçacıkları Visual Basic uygulamalarının ilk kez kullanma olanağı sunar. Iş parçacığı, hata ayıklama sorunları yarış durumları ve kilitlenmeleri sunar. Bu makalede, bu iki sorunları inceler. Daha fazla bilgiYarış koşullarıPaylaşılan bir değişken aynı anda iki iş parçacığı eriştiğinizde, BIR yarış durumu oluşur. Ilk iş parçacığının değişken okur ve ikinci iş parçacığının aynı değeri değişken okur. Sonra ilk iş parçacığı ve ikinci iş parçacığı değeri, işlemleri gerçekleştirmek ve bunların hangi iş parçacığının değeri son paylaşılan değişkenine yazabilirsiniz Bkz: durumunu. Iş parçacığı üzerinde değer önceki iş parçacığının programı yazdı yazmak için değeri değerini yazar iş parçacığının son, korunur.Ayrıntılar ve örneğiHer iş parçacığı, bir zaman bir işlemci, önceden belirlenmiş bir dönem tahsis edilir. Iş parçacığı için tahsis edilen süre sona erdiğinde iş parçacığının içeriğini işlemcisini kadar bir sonraki kapatma kaydedilir ve yürütme sonraki iş parçacığının işlemci başlar.Nasıl tek satırlık bir komut bir yarış durumu neden olabilir mi? Aşağıdaki örnek, bir yarış durumu, teslimin nasıl görmek için inceleyin. Iki iş parçacığı vardır ve her ikisi de, Toplam adlı paylaşılan bir değişken Güncelleştirmekte olduğunuz (olarak ifade edildiği dword ptr ds: [031B49DCh] derleme kodu). Visual Basic kodu: Toplam 100, değer1 50'dir; değer2 15'tir. Önceden 1 numaralı olan iş parçacığı yürütme olanağı alır, ancak yalnızca 1-3 arasındaki adımları tamamlar. Bu, 1 iş parçacığı değişken okuyun ve ek tamamlandı anlamına gelir. Önceden 1 numaralı olan iş parçacığı şimdi yalnızca yeni 150 değerini dışında yazmak için bekliyor demektir. 1 Iş parçacığı durdurulduktan sonra tamamen yürütme iş parçacığı 2 alır. Bu, onu (85) öğrenmek için değişken toplam hesaplanan, değer yazdığını anlamına gelir. Son olarak, 1 iş parçacığı denetimi regains ve yürütme tamamlanır. Bunu, kendi değerini (150) yazar. 1 Iş parçacığı sona erdiğinde, bu nedenle, toplam değeri yerine, 85 150 sunulmuştur. Bu nasıl olabilir Bkz: önemli sorun. Bu bankacılık bir program varsa, müşteri, para var olmamalı, hesabında gerekir. Bu hata rasgele, 1, süre önce yürütme, üzerinde tamamlamak iş parçacığı için olası olduğundan işlemci süresi doluyor. ve 2 iş parçacığı, yürütme sonra başlayabilir. Bu olaylar) oluşursa, sorun ortaya çıkmaz. Iş parçacığı yürütmeyi nondeterministic; bu nedenle zaman veya yürütme sırasını denetleyemezsiniz. Ayrıca, çalışma zamanında hata ayıklama modu ve iş parçacıklarını farklı execute unutmayın. Ayrıca, serideki her iş parçacığı yürütme, hata oluşmaz olduğunu görebilirsiniz. Bu rastgelelik bu hataları çok izlemek ve hata ayıklama zorlaştırır. Yarış durumları oluşmasını engellemek için <a0></a0>, böylece bir kerede yalnızca bir iş parçacığının paylaşılan değişkenine erişim paylaşılan değişkenleri kilitleyebilirsiniz. Değişken 1 iş parçacığı kilitlendi ve iş parçacığı 2'değişkeni de gerekir, vermiyor Thread 2 yürütme iş parçacığı değişken serbest bırakmak için 1 iş parçacığı 2 bekleyeceği çünkü gelişigüzel, bunu. (Daha fazla bilgi için bu makalenin "Başvurular" bölümünde "SyncLock" konusuna bakın.) BelirtilerBir yarış durumu en genel bir belirtisi, öngörülemeyen değerlerini birden çok iş parçacığı arasında paylaşılan olur. Bu, iş parçacıkları yürütme siparişinin unpredictability olur. Bir iş parçacığının wins bir tarihtir; bir tarihtir iş parçacığı wins. Diğer zamanlarda, yürütme düzgün çalışır. Ayrıca, her iş parçacığı ayrı ayrı çalıştırılır, değişken değeri doğru şekilde davranır.KilitlenmelerIki iş parçacıklarını her aynı anda farklı bir değişken kilitlemek ve diğer iş parçacığı zaten kilitli değişken kilitlenemiyor deneyin BIR kilitlenme oluşur. Sonuç olarak, her iş parçacığı yürütme durdurur ve diğer iş değişken yayımlamayı bekler. Çünkü hiçbir şey olmuyor, diğer iş parçacığının istediği değişken basılı tutarak her iş parçacığı ve iş parçacıklarını deadlocked kalır.Ayrıntılar ve örneğiAşağıdaki kod LeftVal ve RightVal iki nesne vardır:Her zaman BIR kilitlenme oluşmaz. Işlemci, durdurmadan önce her iki kilitlerin 1 iş parçacığı yürütür, 1 iş parçacığı, işlemleri ve sonra paylaşılan değişken kilidini açın. 1 Iş parçacığı değişken kilidini açar sonra iş parçacığı 2 ile yürütme, beklendiği gibi devam edebilirsiniz. Bu hata, bu kod parçacıkları yan yana yerleştirilir, ancak bu uygulamada, ayrı bir modül veya alan kodunuzu kodu görünebilir uygun görünmektedir. Bu aynı bu koddan doğru yürütme hem de yanlış yürütme ortaya çıkabileceğinden, izlemek için bir çok hata. BelirtilerKilitlenme genel bir belirtisi bir program veya iş parçacığı grubu vermiyor ' dir. Bu da bir bağlantıyı denir. Her bekleyen diğer iş parçacığının kilitleyen bir değişken için en az iki iş parçacığı var. Diğer değişkenin alır kadar hiçbir iş parçacığı, değişkeni yayımlayacaktır için iş parçacıkları, devam etmeyin. Program, biri veya her ikisi de tam yürütme için bu iş parçacığı üzerinde bekliyorsa tüm program askıda kalma.Bir iş parçacığı nedir?Işlemler, belirtilen bir zamanda tek bir bilgisayarda yürütülmesini farklı uygulamaları ayırmak için kullanılır. Işletim sistemi işlemleri yürütmek, ancak iş parçacığı yapın. Bir iş parçacığı yürütme birimidir. Işletim sistemi için bir iş parçacığının işlemci zamanı iş parçacığının görevleri yürütülmesi için ayırır. Tek BIR işlem birden çok iş parçacığının yürütülmesinin içerebilir. Her iş parçacığı zamanlama önceliklerini ve bir iş parçacığının işlemci için atanmış olan süre boyunca, yürütme tamamlayamazsanız iş parçacığının içeriğini kaydetmek için işletim sisteminin kullandığı yapıları, kendi özel durum işleyicileri korur. Içerik, iş parçacığının işlemci zamanını almasını açana kadar tutulur. Içerik için sorunsuz kendi yürütülmesine devam etmek için iş parçacığı gerektiren tüm bilgileri içerir. Bu bilgiler iş parçacığının işlemci yazmaçların ve ana bilgisayar işlemi <a1>Adres</a1> alanı içinde çağrı yığınını içerir.ReferanslarDaha fazla bilgi için aşağıdaki anahtar sözcükler için Visual Studio Yardımı ara:
316422
(http://support.microsoft.com/kb/316422/EN-US/
)
BILGI: Visual Basic. NET'te iş parçacığı için yol haritası Daha fazla bilgi için aşağıdaki MSDN Web sitesine bakın: Threads and Threading
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconthreadsthreading.asp)
Bu makaledeki bilginin uygulandığı durum:
Otomatik TercümeÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir. Makalenin İngilizcesi aşağıdaki gibidir:317723
(http://support.microsoft.com/kb/317723/en-us/
)
| Diğer Kaynaklar Diğer Destek Siteleri
ToplulukHemen Yardım AlMakale çevirileri |






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Üste