SORU
4 NİSAN 2010, Pazar


POSIX threads ve sinyalleri

POSIX threads ve POSIX sinyalleri nasıl bir etkileşim inceliklerini anlamaya çalışıyorum. Özellikle ilgileniyorum:

  • Sinyal teslim (ilk etapta önemli olmadığını varsayarsak) hangi kontrol etmek için en iyi yolu nedir?
  • Sinyal geldi başka bir iş parçacığı (aslında meşgul olabilir) söylemek için en iyi yolu nedir? (Zaten kötü bir fikir sinyal işleyici pthread durum değişkenleri kullanıyor.)
  • Nasıl güvenli bir şekilde bir sinyal başka bir iş için oluşan bilgi geçen işleyebilir miyim? Bu sinyal işleyicisi olmasına gerek var mı? (Genel olarak diğer iş öldürmek istemiyorum; çok daha ince bir yaklaşım ihtiyacım var.)

Bunu istiyorum neden hakkında referans için TclX paket iş parçacığı desteklemek için dönüştürmek ya da bölmek ve en azından bazı yararlı parça desteği konuları nasıl yapmak için araştırma yapıyorum. Sinyalleri özellikle ilgimizi çeken bu parçalarından biridir.

CEVAP
23 NİSAN 2010, Cuma


  • İplik kontrol etmek için en iyi yolu nedir sinyal teslim edilir?

@Zoli2k, açıkça tüm sinyalleri işlemek için tek bir iş parçacığı aday gösterilen idare ettin (veya iş parçacıkları belirli bir sinyal sorumlulukları olan bir dizi) istediğiniz gibi, iyi bir tekniktir.

  • Başka bir iş parçacığı (aslında meşgul olabilir)söylemek için en iyi yolu nedir sinyal geldi mi?[...]
  • Nasıl güvenli bir şekilde bir sinyal oluştu bu bilgileri geçen halledebilir miyim başka bir iş için mi? Bu sinyal işleyicisi olmasına gerek var mı?

"İyi," ama burada benim öneri: . söylemeyeceğim

Tüm konuları bu sinyal maskesi miras olan main istenen tüm sinyalleri engellemek. Daha sonra özel sinyal sinyal güdümlü olay bir döngü olarak iplik alma, yeni gelen sinyalleri Gönderen modabaşka bir iş parçacığı içi iletişim.

Bunu yapmak için en kolay yolu iplik bir döngü sigwaitinfo or sigtimedwait kullanarak sinyalleri kabul eder. Bu konuyu daha sonra bir şekilde bu sinyaller, belki de ne olursa olsun ** 3, ben daha çok diğer konuları uyanma/O, uygulamaya özel iş parçacığı için güvenli bir sıra içinde bir komut enqueuing, yayın dönüştürür.

Alternatif olarak, özel iplik sinyalleri bir sinyal işleyicisi gönderilmesine, sinyal işlemek için hazır sadece zaman teslim maskesinin izin verebilir. (İşleyicileri için daha fazla hata eğilimli sigwait aile üzerinden sinyal kabul daha eğilimlidir ile teslimat, ancak sinyal.) Bu durumda, alıcının sinyal işleyicisi yapar bazı basit ve uyumsuz-sinyal-güvenli eylem: ayarı sig_atomic_t bayraklar, arama sigaddset(&signals_i_have_seen_recently, latest_sig), write() bir bayt için bir engellenmeyen self-pipe, vb. Sonra, maskeli ana döngüye geri, yukarıdaki iş parçacığı başka bir iş parçacığı olarak sinyal aldıktan iletişim kurar.

(GÜNCELLENDİ@caf haklı olarak sigwait noktaları yaklaşımlar üstündür.)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Damien Hayes

    Damien Hayes

    11 Mart 2008
  • placeboing

    placeboing

    7 Mart 2006
  • Skrillex

    Skrillex

    6 NİSAN 2010