2012-08-04 25 views
7

Ben aşağıda bazı kodları okuyun:pthread'de PTHREAD_CREATE_JOINABLE kullanımı nedir?

İşte
void 
mcachefs_file_start_thread() 
{ 
    pthread_attr_t attrs; 
    pthread_attr_init(&attrs); 
    pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_JOINABLE); 
    pthread_create(&mcachefs_file_threadid, &attrs, mcachefs_file_thread, NULL); 
} 

, PTHREAD_CREATE_JOINABLE olarak attrs ayar kullanımı nedir? Ayrıca, pthead_create tarafından oluşturulan bir iş parçacığının varsayılan özniteliği değil mi?

cevap

11

Evet, PTHREAD_CREATE_JOINABLE varsayılan öznitelik değeridir. Amaç, iş parçacığı üzerinde pthread_join aramasını sağlamanızdır; bu, iş parçacığı sona erinceye kadar bekleyeceği bir işlevdir ve ana rutini varsa size geri dönüş değeri verir.

Bazen, arka plan çalışması yapmak için bir iş parçacığı oluştururken, sonuçlarını kullanmadan veya başka bir şeye geçmeden önce bittiğinden emin olmak iyi bir fikir olabilir. Bu birleştirilebilir iş parçacığı içindir.

+0

+1, farklı bir açıklamayı tercih etsem de, doğru olmak için +1, uygulamanızı kolayca kilitlemenize izin vermek, sürekli olarak kontrolsüz bir şekilde iş parçacığı oluşturma/sonlandırma/imha etmenize izin verme, iş parçacığı mikro yönetiminde girişimlere izin verme çalışmaz, genel performansı düşürür ve uygulamanızın anında kapanmasını veya gerçekten de tamamen kapanmasını engeller. –

3

Posix özelliğinden, yeni başlatılan evre öznitelikleri nesnesindeki ayrılma durumu özniteliğinin varsayılan ayarı gerçekten de PTHREAD_CREATE_JOINABLE şeklindedir. Örneğin bkz. http://linux.die.net/man/3/pthread_attr_setdetachstate Yani haklısınız: kod snippet'inde pthread_attr_setdetachstate kod satırı gerekli değildir.

İlgili konular