2016-04-07 30 views

cevap

3

atexit() ile kaydedilen işlevler olarak en son işlevler yürütülür mü?

atexit() çağrıları, ana iş parçacığının çalışmasını bitirdikten sonra ana iş parçacığında yürütülür. Bunun dışında hiçbir garanti verilmez.

bu anda diğer ipler hala çalışıyor olması mümkün mü?

Evet, diğer iş parçacıklarını durdurmak için adımlar atmadınız ve main() öğesinin geri dönmesinden önce() onlara katılmalısınız. Genel olarak C (veya C++) gibi sizin için bunu yapmayacağım çalışma zamanını sizin parçacığı tüm açık, kontrollü kapatma yapmak istiyorum, ve onları ana() iplik çıkılıyor bile çalışmaya devam icar olasılığı da dikkate alınmıştır main() 'ın kapatma sırasının bir parçası olarak ayrılan kaynaklara erişmeye çalışacaklardır, bu da tanımlanamayan davranışı çağırır (genellikle program kapatılırken ara sıra olmayan, kolayca tekrarlanamayan bir çökme olarak yaşanır)

+1

Sanırım bu bir doğru. exit() çağrıldığında atexit() çağrılır. Ana iş parçacığınız pthread_exit'inize sahip olabilirsiniz ve diğer iş parçacıklarından biri exit() işlevini çağırıncaya kadar çalışmaya devam eder. –

+0

“C++ thread” olduklarını kim söyledi? 'atexit()' C versiyonu olabilir, ancak teknik özelliklerde farklılıklar olup olmadığını bilmiyorum - uygulamaları bir yana bırakın! – PJTraill

+0

@PJTraill Haklısınız, cevabımı yansıtacak şekilde değiştireceğim. şimdi de ana-parçacığı çağıran çıkış() davayı ele almış olduk 今天 @ –