SORU
4 Mayıs 2010, Salı


Neden pthreads’ durumu değişken fonksiyonları bir zaman uyumu gerektirir?

pthread.h; değişkenlerle ilgili işlevler (pthread_cond_wait(3)) bağımsız değişken olarak bir zaman uyumu gerektirir koşul okuyorum. Neden? Söyleyebileceğim kadarıyla, bir dışlama oluşturmak için gidiyorumsadecebu bağımsız değişken olarak kullanmak? Bu dışlama ne yapması gerek?

CEVAP
4 Mayıs 2010, Salı


Sadece durum değişkenleri (veya başlangıçta) uygulanan yol.

Zaman uyumu korumak için kullanılırdurumu değişken kendisi. Bir bekle senden önce kilitli ihtiyacımız var.

Bekle "atomik" dışlama kilidini, Diğerleri erişim durumu değişken (sinyal) için izin. Durumu değişken veya sinyalini yayın olduğunda, bekleme listesinde konuları bir veya daha fazla uyanmış olacak ve zaman uyumu sihirli tekrar bu konu için kilitli olacak.

Genellikle durum değişkenleri ile aşağıdaki işlemi nasıl çalıştıklarını gösteren bakın. Aşağıdaki örnek bir durumu değişken bir sinyal ile iş verilen bir iş parçacığı.

thread:
    initialise.
    lock mutex.
    while thread not told to stop working:
        wait on condvar using mutex.
        if work is available to be done:
            do the work.
    unlock mutex.
    clean up.
    exit thread.

Bu iş bekle döndüğünde kullanılabilir ki bu döngü içinde sağlanan yapılır. Ne zaman konu olmuştur bayraklı durdurmak için çalışır (genellikle başka bir iş parçacığı ayarı çıkış durumu o tekme durumu değişken uyandırmak bu parçacığı), döngü çıkışı, zaman uyumu olacak kilitli ve bu konu will exit.

Yukarıdaki kod kullanılabilir işlerin yapımı sırasında kilitli kalır tek bir tüketici modeli. Çok tüketici bir varyasyon için, bir kullanabilirsinizörnek:

thread:
    initialise.
    lock mutex.
    while thread not told to stop working:
        wait on condvar using mutex.
        if work is available to be done:
            copy work to thread local storage.
            unlock mutex.
            do the work.
            lock mutex.
    unlock mutex.
    clean up.
    exit thread.

diğer tüketiciler bu işi yaparken işe almak için izin verir.

Durumu değişken yoklama yükünü biraz koşulu yerine başka bir iş parçacığı bir şey gerektiğinde size bildirmek için izin rahatlatır. Başka bir iş parçacığı aşağıdaki gibi kullanılabilir bu konuyu anlatmak

lock mutex.
flag work as available.
signal condition variable.
unlock mutex.

Büyük bir çoğunluğu ne sıklıkla yanlış denilen sahte wakeups oldu genelde hep çünkü birden çok iş parçacığı gördüğü işaret içinde pthread_cond_wait arama (yayın), bir dönüş ile, zaman uyumu, yaptığı işler, sonra tekrar bekle.

İkinci işaret iplik yapılacak çok iş olduğunu hiçbir zaman ortaya çıkmazdı. Yani kaldığın için ekstra bir değişkeni gösteren bu iş yapılmalı (bu doğal olarak zaman uyumu korumalı ile condvar/dışlama çifti burada başka bir iş parçacığı için gerekli kilit dışlama önce değişiyor ancak).

olduteknik olarak mümkün bir konuya dönmek bir bekleme durumu olmadan tekme ile başka bir işlem (bu gerçek bir sahte uyanış) ama hepsi benim uzun yıllar çalışan pthreads, hem de geliştirme/hizmet Kodu ve kullanıcı onları, ben asla bir kez alınan biri bu. Belki de bu HP iyi bir uygulama vardı diye oldu :-)

Herhangi bir durumda, hatalı durumda ele aynı kodu da, hakiki sahte wakeups de beri çalışma mevcuttur bayrağı olanlar için ayarlanmış işlenmiş.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Avast

    Avast

    27 NİSAN 2006
  • PaysNatalAu's channel

    PaysNatalAu'

    11 Aralık 2010
  • Rooster Teeth

    Rooster Teet

    11 Temmuz 2006