2012-01-05 23 views
10

Anladığım kadarıyla, pthread_exit(), dönüş değeri olan bir iş parçacığını sonlandırmanız gerektiğinde geri dönmek için tam olarak eşittir. İnsanlar tutarlı bir şekilde, yani geri dönerek, Pthread'in neden böyle bir çoğaltılmış arabirimi tanımladığını iş için kullanabilirler? Aklıma gelenPthread: İnsanlar neden pthread_exit kullanarak rahatsız ediyor?

cevap

9

iki neden: pthread_exit

  1. çağrı yığını herhangi derinliğine bir iş parçacığı çıkmak için izin verir. Burada da

  2. Must be called on the main thread if the TLS keys for the main thread are to have their free functions called. Ve:. "Tüm iptal temizleme işleyicileri sonra itti ve henüz onlar itti olduğunu ters sırada attı edilir attı ve daha sonra idam edilmiş herhangi bir iptal temizlik işleyicileri iplik halinde idam edildi herhangi bir iş parçacığına özgü veriye sahip, uygun yıkıcı işlevleri belirtilmemiş bir sırayla çağrılır ... pthread_exit() 'a örtük bir çağrısı, ana() öğesinin ilk çağrıldığı iş parçacığı dışındaki bir iş parçacığı, başlangıç ​​rutininden döndüğünde yapılır. Bunu oluşturmak için kullanıldı. İşlevin dönüş değeri iş parçacığının çıkış durumu olarak işlev görür. " Eğer bir yinelenen bir arayüze pthread_exit diyeceğiz ediyorsanız keyfi bir noktada programdan çıkmak olabilir çünkü

+1

Katılıyorum. Bu iki durumda pthread_exit hala iade ile değiştirilebilir. –

+3

# 1 için, evet, ancak bunu yapmak uygun olmayabilir. # 2 için, yapamaz. Gönderdiğim bağlantıya bakın. Son zamanlarda bu gerçek dünyaya rastladım. –

+4

@Mengfei: 'pthread_exit()', pthread_create() 'tarafından başlatılan işlevdeyseniz yalnızca 'return' ile değiştirilebilir. İş parçacığı bir işlev çağrısı yığında daha derinse, 'dönüş' aynı şeyi yapmayacaktır. –

3

, o zaman da, bir yinelenen arayüzü exit() çağırmalıdır. Muhtemelen devam edemeyeceğiniz bir tür hata durumunuz olduğunda, pthread_exit()'u aramak isteyebilirsiniz. Veya alternatif olarak, iş parçacığının içinde aradığınız değeri buldunuz.

o göre gerçek varlık, var ise documentation:

parçacığı dışında başka bir iş parçacığı ana ettiği() ilk başlangıç ​​rutininden getiri çağrıldığında pthread_exit An örtülü() çağrısı yapılır Bunu yaratmak için kullanıldı. İşlevin dönüş değeri iş parçacığının çıkış durumu olarak işlev görür. Eğer parçacağından return <some pointer> yaptılar, ya da sadece sonuna ulaşmış ise

Yani, pthread_exit() neyse adı verilecekti. main()'dan çıkmakla aynıdır, return 0 ise aslında exit(0)'u çağırıyorsunuz. Fonksiyonun mevcut olması gerekir, aksi halde çekirdeğin çıkarıp çıkmadığını belirleme yolu yoktur.

İlgili konular