2014-11-16 16 views
7

Çok iş parçacıklı bir programım var. Bütün anlamlı sinyalleri tek bir iş parçacığında ele almak istiyorum. Bu herhangi bir iş parçacığı oluşturmadan önce benim yaptığım iş:C'deki çok iş parçacıklı programda hangi sinyaller iş parçacığı tarafından engellenmemelidir?

Ama iyi anlamda sinyalleri belirli iplik doğrudan gönderilebilir durumun bol olduğu için bazı sinyaller engellemesi kaldırıldı bırakarak önerir: SIGSEGV veya SIGPROF - Ben, inan Etkileşimli bir programda engellenmemiş SIGINT'u bırakmak kadar iyidir.


benim öneri bu iki sinyalleri (SIGSEGV, SIGPROF) hakkında doğru mu? Bazı sağduyunun ardından engellemeden başka hangi sinyalleri bırakmalıyım?

+0

Bu, sağduyu, proses sinyalizasyonu için aynı şeyi anlatmaz mıydı? – didierc

cevap

3

Asenkron sinyaller (yani SIGINT gibi kontrol terminal tarafından üretilen kill komut/fonksiyon ve sinyaller gönderdiği bir şey içeren, çoğu s) bloke sinyale sahip sürecinde herhangi bir parçacığı için teslim, bu yüzden hiç gerek yoktur Tüm iş parçacıklarında engelini kaldırmayın. Özel bir sinyal işleme ipliği kullanıyorsanız, sinyal işleme ipliği hariç tüm ipliklerde engellenmelerini istersiniz.

Senkron sinyaller, bu iş parçacığı tarafından gerçekleştirilen bir eylemin sonucu olarak belirli bir iş parçacığına iletilir. Onlar size programında ciddi hatalar yoksa, bunların hiçbiri, hiç olur gerektiğini SIGPIPE hariç vb SIGPIPE, SIGBUS, SIGSEGV, SIGFPE içerir ve muhtemelen yerine EPIPE hatası alıyorum ve işleyebilir böylece yine SIGPIPE engellemek istiyorum Bu koşul doğru. Bu yüzden çoğu zaman sadece hepsini engellemek için acımadığını söyleyebilirim. 'u 'a göre SIGSEGV ya da'a ihtiyaç duyarsanız, muhtemelen nedenleri tekrar düşünmelisiniz, ancak bu süre zarfında blokajı kaldırmaktan çekinmeyin.

+1

100k'ya ulaştığınız için tebrikler! –

+0

Teşekkürler. Yorumun için farketmedim bile. –

İlgili konular