Test et ve test et ve ayarla - Test and test-and-set - Wikipedia

İçinde bilgisayar Bilimi, test et ve ayarla İşlemci talimat uygulamak için kullanılır Karşılıklı dışlama içinde çok işlemcili ortamlar. Doğru olmasına rağmen kilit test ve set ile uygulanabilir, kaynak çekişmesi meşgul kilidinde (test ve set işleminin belleğe erişmesi gerektiğinde veri yolu kilitlemesi ve önbellek geçersiz kılmasından kaynaklanır atom olarak ).

Ek yükü azaltmak için daha ayrıntılı bir kilitleme protokolü test et ve test et ve ayarla kullanıldı. Ana fikir azaltmaktır cevap yazmak bu yaratabilir kaynak çekişmesi iki ayrı iş parçacığı aynı kilidi istediğinde. Eğer n iş parçacıkları kilit için rekabet ediyor, sadece kullanıyorlarsa serbest bırakılır bırakılmaz onu almaya çalışacaklar test et ve ayarla, her iş parçacığının kilit bayrağını geçersiz kılmasına neden olur, yani kalan işlemcilerin önbelleği aracılığıyla yayılması gerekir n herhangi bir iş parçacığı güvenli bir şekilde okuyamadan önce. Ekleyerek çek-getiri adımda, kilidin serbest olduğunu fark eden yalnızca ilk yürütme iş parçacığı onu almaya çalışacak ve geri yazma işlemini ortadan kaldıracaktır.

Boole kilitli: = yanlış // paylaşılan kilit değişkeniprosedür EnterCritical () { yapmak {    süre (kilitli == doğru) verim (); // kilit meşgul görünüyor, bu nedenle planlayıcıya teslim  } süre TestAndSet (kilitli) // gerçek atomik kilitleme}prosedür TestAndSet (kilitle) {boolean ilk = kilit; kilit = doğru; ilk dönüş; }

Çıkış protokolü:

prosedür ExitCritical () {locked: = false}

Giriş protokolü, kilidin serbest kalmasını bekleyen normal bellek okumalarını kullanır. Test-ve-set, yalnızca normal hafıza okuması boş olduğunu söylediği zaman kilidi açmaya çalışmak için kullanılır. Bu nedenle, pahalı atomik hafıza işlemleri, test ve set etrafında basit bir dönüşten daha az gerçekleşir.

Eğer Programlama dili kullanılan destekler kısa devre değerlendirmesi giriş protokolü şu şekilde uygulanabilir:

 prosedür EnterCritical () { süre (kilitli == doğru veya TestAndSet (kilitli) == doğru) atlama // kilitlenene kadar döndür }

Uyarı

Buna rağmen optimizasyon yararlıdır sistem programlama yüksek düzeyde kaçınılmalı eşzamanlı programlama tüm kısıtlamalar açık ve anlaşılır olmadıkça. Kötü kullanıma bir örnek benzer deyim aranan çift ​​kontrol edilmiş kilitleme, hangisi özel önlemler olmadan güvensiz ve olabilir desen karşıtı.[1]

Ayrıca bakınız

Referanslar

  • Gregory R. Andrews, Çok İş Parçacıklı, Paralel ve Dağıtılmış Programlamanın Temelleri, s. 100–101. Addison-Wesley, 2000. ISBN  0-201-35752-6.