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
iki neden: pthread_exit
çağrı yığını herhangi derinliğine bir iş parçacığı çıkmak için izin verir. Burada da
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ü
, 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.
- 1. Neden insanlar gökyüzü kutuları için tetrahedron kullanmıyor?
- 2. Neden insanlar bir docker kabında virtualenv oluşturuyor?
- 3. PHP: Neden bazı insanlar başlangıçta '_' ismini kullanıyor?
- 4. Pthread Loop'ta Segmentasyon Hatası
- 5. pthread_exit neden elips tarafından yakalanmış bir şey atıyor?
- 6. OS X clang -pthread
- 7. Neden GCC ve Clang'da std :: thread kullanımı için -pthread gerekli?
- 8. Neden Java Derleyicisi foreach kullanarak ham türden şikayet ediyor?
- 9. WPF'm neden aniden isyan ediyor?
- 10. Neden herkes ViewData'dan nefret ediyor?
- 11. Vim tutulmasını önlemek oldukça çok beni rahatsız ediyor bir davranış yoktur
- 12. pthread (segmentasyon hatası)
- 13. pthread library undefined reference
- 14. C - pthread bağımsız değişkenler
- 15. Rahatsız edici vim (un) girinti kuralları
- 16. Glibc ve pthread kütüphaneleri neden aynı API'ları tanımladı?
- 17. İnsanlar neden rfec'i Gemfile'da test ve geliştirme altında gruplandırıyor?
- 18. konuya göre pthread in perl
- 19. rahatsız emriyle, $ i değerleri Al
- 20. Pthread Mutex: pthread_mutex_unlock() çok fazla zaman harcar
- 21. mouseover bazen touchstart yerine ateş ediyor - neden?
- 22. JSON.stringify() Tarih nesneleri neden kabul ediyor?
- 23. Bu arabellek neden düzenlenemez baytlara işaret ediyor?
- 24. Neden android alarm yöneticim anında ateş ediyor?
- 25. PyCharm, patch.object hakkında şikayet ediyor, ancak neden?
- 26. Raylarım neden bu kadar yavaş test ediyor?
- 27. C++ pthread engelleme kuyruğu kilitlenme (Bence)
- 28. Neden iade kullanabiliriz pthread_exit() kullanıyoruz? Aşağıdaki programı <code>return p</code> olarak
- 29. Android nasıl programlanabilir olarak rahatsız etmeyin (dnd)
- 30. toString(): hata ayıklama veya insanlar için?
Katılıyorum. Bu iki durumda pthread_exit hala iade ile değiştirilebilir. –
# 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. –
@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. –